2013-09-10 69 views
1
public class Translation 
{ 
    public string LanguageCode { get; set; } 
    public string Value { get; set; } 
}    

public class tblEnumJobFunction 
{ 
public string strEnum { get; set; }   
public List<Translation> mlgValue { get; set; } //mlgValue->MultiLingualValue 
} 

我有一個List<tblEnumJobFunction> JobFunctionList與一些數據。鏈Lambda Linq

示例數據:

JobFunctionList[0].strEnum="ENUM_Manager"; 
JobFunctionList[0].mlgValue[0].LanguageCode ="EN"; 
JobFunctionList[0].mlgValue[0].Value="Manager"; 

JobFunctionList[0].mlgValue[1].LanguageCode ="DE"; 
JobFunctionList[0].mlgValue[1].Value="Geschäftsführer"; 

JobFunctionList[1].strEnum="ENUM_Student"; 
JobFunctionList[1].mlgValue[0].LanguageCode ="EN"; 
JobFunctionList[1].mlgValue[0].Value="Student"; 

JobFunctionList[1].mlgValue[1].LanguageCode ="DE"; 
JobFunctionList[1].mlgValue[1].Value="Schüler"; 

我可以給國家代碼使用LINQ篩選列表和高興。

問題是我該如何在lambda中使用List/Collection擴展來編寫與下面的等價查詢語法?

這是一個級聯/鏈查詢;查看另一個列表中的列表。

此查詢語法工作正常。

string CountryCode ="EN"; 
var Query = from jobfunction in JobFunctionList 
from translation in jobfunction.mlgValue 
where translation.LanguageCode == CountryCode //'EN' 
select translation; 

結果是;

List<string> JobList; 

foreach (var translationitem in Query) 
{ 
    JobList.Add(translationitem .Value); 
} 

現在我有

JobList[0]="Manager"; 
JobList[1]="Student"; 

For CountryCode="DE" I have; 
JobList[0]="Geschäftsführer"; 
JobList[1]="Schüler"; 

有什麼辦法來寫上面的λ類同這個查詢語法?

JobFunctionList.Select(a=>a.mlgValue).Where(b=>b....)... 

回答

2

兩個from子句,如在你的例子中,扁平你的序列。您需要使用SelectMany擴展方法。這可能是你在找什麼:

List<string> JobList = Objs.SelectMany(jobFunction => jobFunction.mlgValue) 
          .Where(translation => translation.LanguageCode == CountryCode) 
          .Select(translation => translation.Value) 
          .ToList(); 

注:考慮使用好名字,甚至與lambda表達式內小範圍內的正式參數。 a,b,m, fo不是這個最好的名字。

+0

它工作好!非常感謝你!我也會遵循你的推薦。 – freewill

+0

我跟進你的推薦命名和編輯原始問題,讓其他人更好地理解代碼。 – freewill