繁体   English   中英

使用 LINQ Lambda 表达式按 group by 和 where 条件确定值

[英]Using LINQ Lambda expression determining value by group by and where condition

所以我有以下数据表:

Region      Class
Reg100      A
Reg100      B
Reg200      A
Reg300      B  

我想确定一个有两个类 A 和 B 的区域。在这种情况下,它将是 Reg100。 我怎么能用 lambda 表达式写这个?

我尝试过类似下面的东西,但没有得到我想要的。

dt.Where(x => x.Class.Contains(listOfAandB).GroupBy(x=>x.Region).FirstOrDefault()

让我们定义输入:

class Data
{
    public string Region;
    public string Class;
}

var dt = new[] 
{ 
    new Data { Region = "Reg100", Class = "A" },
    new Data { Region = "Reg100", Class = "B" },
    new Data { Region = "Reg200", Class = "A" },
    new Data { Region = "Reg300", Class = "B" },
};

现在,使用GroupBy我们可以按区域对输入进行分组。

dt.GroupBy(x => x.Region)

这产生 { Reg100 (A, B), Reg200 A, Reg 300 B }。 现在我们看看是否能同时找到 A 和 B:

dt.GroupBy(x => x.Region)
    .Where(g => g.Any(x => x.Class == "A") && g.Any(x => x.Class == "B"))

最后,因为我们只对该地区感兴趣,所以我们向它投射:

dt.GroupBy(x => x.Region)
    .Where(g => g.Any(x => x.Class == "A") && g.Any(x => x.Class == "B"))
    .Select(g => g.Key);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM