2011-04-01 102 views
2

我有一個LINQ查詢返回一個列表,結果是這樣的:傳球列表LINQ查詢

protected void Page_Load(object sender, EventArgs e) 
{ 
    var MyList = GetPatientsFromDB(TheUserID); 
} 

此列表類型爲MyModel的是這樣的:

MyModel 
{ 
public int PatientID {get;set;} 
} 

現在我「M希望做的是這個列表傳遞給一個名爲GetPatientInfo功能和返回的MyOtherModel

MyOtherModel{ 
public int PatientID {get;set;} 
public string Name {get;set;} 
public string Region {get;set;} 
} 

另一份名單,我有寫第二個函數有些問題。

我開始與

public static List<MyOtherModel> GetPatientInfo(List<MyModel> 
{ 

using (..... MyDC = new... DataContext) 

{ 
    var OutputList = from f in MyDC.Table 
         where......? 

} 

我卡上寫的where子句和調用語句。感謝您的建議。

回答

4
public static List<MyOtherModel> GetPatientInfo(List<MyModel list> 
{ 
    using (..... MyDC = new... DataContext) 
    { 
     var result = from f in MyDC.Table 
        where list.Select(m => m.PatientID).Contains(f.PatientID) 
        select f; 

     return result.ToList(); 
    } 
} 
+0

或許更好地使用臨時變量來保存'list.Select(...)'以避免多次執行......不確定LINQ-to-SQL提供程序是否會自動緩存該值。 – 2011-04-02 08:50:58

+0

@Stephen:你是什麼意思? – frenchie 2011-04-02 19:00:27

+0

他說要做'var patients = list.Select(m => m.PatientID)',然後對其執行'Contains()'調用。 – hunter 2011-04-02 21:31:38

1
public static List<MyOtherModel> GetPatientInfo(List<MyModel> patients) 
{ 

    using (..... MyDC = new... DataContext) 
    { 
     var OutputList = from f in MyDC.Table 
         where patients.Any(p => p.PatientID == f.PatientID) 
         select f; 
    } 
} 
+1

我得到「本地序列不能用於查詢運算符的LINQ to SQL實現,但Contains運算符除外」。 – frenchie 2011-04-01 20:03:26

+0

啊,Linq2Sql在它的支持上有限。我相信亨特的榜樣應該爲你工作。 – 2011-04-01 20:17:29

2

要查詢語法完全保留它,它會是這樣的:

var OutputList = from f in MyDC.Table 
    from m in list 
    where f.PatientId == m.PatientId 
    select f; 

然而,這是否實際工作與否取決於你使用的是什麼LINQ提供程序。這是LINQ To SQL嗎?對象?實體?取決於這是哪個提供者,它可能沒有可支持此查詢的幕後實現。如果是這種情況,您可能會被迫在MyDC.Table(MyDC.Table.AsEnumerable())上拋出AsEnumerable(),或者完全重新考慮您的查詢。 AsEnumerable會將整個表格放入內存中,然後從這一點開始使用LINQ to Objects,這可能是一個昂貴的舉措。