-4

私は次のようなリストを持っています(ENはデフォルト値と言えます)

id="1", lang="FR", value="text1FR"
id="1", lang="EN", value="text1EN"
id="2", lang="EN", value="text2EN "
id="3", lang="FR", value="text3FR"
id="3", lang="EN", value="text3EN"

この結果を取得するためにlinqを介してこのリストをフィルタリングする方法はありますか? (そこにある場合は FR を使用し、そうでない場合は常にそこにある EN を使用します)

id="1", lang="FR", value="text1FR"
id="2", lang="EN", value="text2EN"
id="3", lang="FR", value="text3FR "

4

1 に答える 1

2
var result = list.GroupBy(x => x.id)
    .Select(g => g.Any(x => x.lang=="FR") 
                 ? g.First(x => x.lang=="FR")
                 : g.First(x => x.lang=="EN"));

これはより効率的です:

var result = list.GroupBy(x => x.id)
    .Select(g => g.Where(x => x.lang == "FR")
                  .DefaultIfEmpty(g.First(x => x.lang == "EN"))
                  .First());
于 2013-04-02T13:41:02.990 に答える