-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 回答