2011-07-21 29 views
0

請原諒我以前曾問過這個問題,但我不確定我要求的是什麼,這會使得搜索起來很困難。將linq子查詢分解爲函數

目前,我有以下LINQ查詢(使用LINQ到實體):

results = (from r in query 
     select new PatientReport 
     { 
      Report = r, 
      Patient = (from patient in database.PatientSet 
        where patient.IsActive && patient.Account == r.Account 
        select patient).FirstOrDefault() 
     }).ToList(); 

現在這工作得很好,LINQ到實體,從它產生一個單一的連接查詢,和所有的花花公子。然而,我在我的代碼的一些其他地方發現,我有以下幾點:

(from patient in database.PatientSet 
where patient.IsActive && patient.Account == r.Account 
select patient).FirstOrDefault() 

現在,我的問題是: 是否有可能有一些代碼會表現得一樣的第一個片段,但會是這樣的:

results = (from r in query 
     select new PatientReport 
     { 
      Report = r, 
      Patient = database.GetActivePatient(r.Account) 
     }).ToList(); 

,並在數據庫類(或者患者,或者作爲一個擴展的方法),也就是將組裝下面的查詢(顯然不執行它,那麼它可能函數不作爲其他查詢的一部分運行):

public xx GetActivePatient(string account) 
{ 
    return (from patient in database.PatientSet 
      where patient.IsActive && patient.Account == r.Account 
      select patient).FirstOrDefault() 
} 

雖然我明白,GetActivePatient的簽名很可能是毛茸茸的瘋狂和完全的IQueryable或IExpression等

切實我試圖創建一個用於創建可用於作爲一部分的查詢功能其他查詢。

任何幫助(即使它是'不,這是不可能的'),表示讚賞。謝謝。

回答

0

可以使用如下擴展功能:

private Func<DataClasses, String> FunctionName(string account) 
{ 
     return (from patient in database.PatientSet 
     where patient.IsActive && patient.Account == r.Account 
     select patient).FirstOrDefault() 
} 
+0

不知道我完全理解 - 就沒有我對於初學者需要通過跨數據上下文(或IQueryable的數據集)? – Tom

-1

一個ToString的一個例子()型擴展方法:

public static IEnumerable<string> ToString<T>(this IEnumerable<T> list) 
{ 
    return list.Select(t => t.ToString()); 
} 

這現在可以在類似的東西來使用。

List<string> patientStrings = (from patient in database.PatientSet 
     where patient.IsActive && patient.Account == r.Account 
     select patient).ToString().ToList(); 

(我真的不知道,如果去年的語法是正確的,因爲我從來不寫LINQ的陳述與「從」關鍵字,我用lambda表達式。)

如果我正確地翻譯,將是:

List<string> patientStrings = database.PatientSet 
    .Where(patient => patient.IsActive && patient.Account == r.Account) 
    .ToString() 
    .ToList();