2017-05-24 43 views
0

返回此結果的SQL如下所示。Linq to SQL select匿名類型返回列表

我的LINQ到SQL查詢返回一個對象,具體類型「憑據」,其中包括其他屬性列表(字符串)等級列表。我可以控制憑證類型和查詢,但不能控制底層數據庫。

這裏是我的回報目前的樣子:

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」作爲值。

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

要的是大內聯LINQ statment,加

.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()) 
    } 
}) 

的`TypeWithGradesList是具有最終結果的所有領域的典範。

+0

您可能需要在'.Select()'之前放置'.AsEnumerable()',以便Linq環境不會抱怨它不能將lambda轉換爲實際的SQL。 – Dai

+0

@戴,可能是的。我認爲內聯linq返回'IEnumerable ',但我通常使用擴展函數,所以這不是我的工作記憶。 – LB2

+0

謝謝。理智得救了。對於下一個可能使用它的人來說 - 在「.Select(」,由Dai建議,之前的「.AsEnumerable()」需要糾正「lambda表達式......不能轉換...」錯誤,同時使用LinqPad。謝謝! – Jazzy