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一些数据。

示例数据:

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 过滤此列表并对此感到满意。

问题是如何通过带有 List/Collection 扩展的 lambda 编写等效的以下查询语法?

它是一个级联/链式查询;查看另一个列表中的列表。

此查询语法工作正常。

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";

有没有办法用类似于这个的 lambda 来编写上述查询语法?

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

1 回答 1

2

如您的示例中的两个from子句,使您的序列变平。您需要使用SelectMany扩展方法。这可能是您正在寻找的:

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

注意:考虑使用好的名称,即使对于 lambdas 中范围较小的形式参数也是如此。a, b, m,fo不是最好的名字。

于 2013-09-11T00:00:37.913 回答