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 を使用してフィルター処理でき、満足しています。

質問は、リスト/コレクション拡張機能を使用して、ラムダによって以下の同等のクエリ構文をどのように記述できるかです。

これはカスケード/チェーン クエリです。別のリスト内にあるリストを調べます。

このクエリ構文は正常に機能しています。

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....)...
4

1 に答える 1

2

fromあなたの例のように、2 つの句はシーケンスを平坦化します。SelectMany拡張メソッドを使用する必要があります。これはおそらくあなたが探しているものです:

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

注: lambdas 内のスコープが小さい正式なパラメーターであっても、適切な名前を使用することを検討してください。a、、、はこれに最適な名前ではありませbmfo

于 2013-09-11T00:00:37.913 に答える