2017-05-24 8 views
0

この結果を返すSQLは次のとおりです。Linq to SQL selectは匿名型のリストを返します

私のlinq to sqlクエリは、他のプロパティの中に具体的な型の "Credentials"というオブジェクトを返します。List of(文字列)GradesList資格情報の種類とクエリは制御できますが、基になるデータベースは制御できません。ここで

は私のリターンは現在、次のようになります。私が欲しいもの

Id Code IssueDate ExpDate Grd1 Grd2 Grd3 Grd4 Grd5 Grd6 
6 TE0150 4/21/1999 4/21/2002 N N N N Y Y 
6 TE0150 3/11/2003 3/28/2007 N N N N Y Y 
6 TE0150 3/29/2012 3/28/2017 N N N N Y Y 
6 TE0140 5/3/2007 5/3/2008 Y Y Y Y N N 
6 TE0140 3/29/2012 3/28/2017 Y Y Y Y Y Y 

は次のとおりです。ここで

Id Code IssueDate ExpDate GradesList 
6 TE0150 4/21/1999 4/21/2002 Grd5,Grd6 
6 TE0150 3/11/2003 3/28/2007 Grd5,Grd6 
6 TE0150 3/29/2012 3/28/2017 Grd5,Grd6 
6 TE0140 5/3/2007 5/3/2008 Grd1,Grd2,Grd3,Grd4 
6 TE0140 3/29/2012 3/28/2017 Grd1,Grd2,Grd3,Grd4,Grd5,Grd6 

はSQLです。 PPS_ENDORSE_DTLテーブルには、各Grdレベルの列があり、値として「Y」または「N」があります。その大きなインラインのLINQなステートメントに

from en  in PPS_ENDORSE_DTL 
join jpi in JPM_JP_ITEMS  on new { x1 = en.ACCOMPLISHMENT, x2 = en.DT_ISSUED }  equals new { x1 = jpi.JPM_CAT_ITEM_ID, x2 = jpi.EFFDT } 
join jp  in JPM_PROFILE  on new { x1 = jpi.JPM_PROFILE_ID, x2 = en.EMPLID }   equals new { x1 = jp.JPM_PROFILE_ID, x2 = jp.EMPLID } 
join jci1 in JPM_CAT_ITEMS on  en.PPS_ENDORSE_SUBJ         equals  jci1.JPM_CAT_ITEM_ID 
join jci2 in JPM_CAT_ITEMS on new { x1 = jpi.JPM_CAT_TYPE, x2 = jpi.JPM_CAT_ITEM_ID } equals new { x1 = jci2.JPM_CAT_TYPE, x2 = jci2.JPM_CAT_ITEM_ID } 
join es  in PPS_ENDORSE_SUB on  jci1.JPM_CAT_ITEM_IDequals       equals  es.PPS_ENDORSE_SUBJ 
+0

実際のLinq-to-SQLまたはLinq-to-Entitiesですか? Linq-to-SQLは、.NET 3.5で最後に更新された時点で、現在のところ廃止されていることに注意してください。 – Dai

答えて

1

、 `TypeWithGradesListはあなたの最終的な結果のすべてのフィールドを持つモデルである

.AsEnumerable().Select(r => { 
    var selectedGrades = new List(); 
    if (r.Grd1 == "Y") selectedGrades.Add("Grd1") 
    if (r.Grd2 == "Y") selectedGrades.Add("Grd2") 
    ... 
    return new TypeWithGradesList{ 
     .... 
     GradesList = string.Join(",", selectedGrades.ToArray()) 
    } 
}) 

を追加します。

+0

'.Aselectable()'を '.Select()'の前に置く必要があるかもしれないので、Linq環境はラムダを実際のSQLに変換できないと不平を言っていません。 – Dai

+0

@Dai、おそらくはい。私はインラインlinqが 'IEnumerable 'を返したと思ったが、私は通常拡張機能を使用しているので、これは私のために働くメモリではない。 – LB2

+0

ありがとうございます。正気は保存されました。 Daiが提案した ".Select("、 "ラムダ式を修正する必要があります...変換できません..."エラーの前に ".AsEnumerable()"を使用する次の人のために、 LinqPadを使用しています。ありがとうございました! – Jazzy

関連する問題