LINQ to SQL选择Distinct by Multiple Columns并返回整个实体

本文关键字:返回 实体 Columns Multiple SQL to 选择 Distinct by LINQ | 更新日期: 2023-09-27 18:08:01

我正在使用第三方数据库,需要为我正在研究的特定市场选择一组不同的数据。每个市场的数据都是相同的,所以把它全部拉进来是多余的,我不想在它周围硬编码任何逻辑,因为我们正在与供应商一起解决这个问题,但是我们需要一个修复程序,它将与供应商的修复程序以及数据库当前的方式一起工作,因为它可能需要一段时间才能修复。

我不想按任何东西分组,因为我想获得最低级别的数据,但我不想要任何冗余数据。我当前的查询看起来类似于这个…

determinantData = (from x in dbContext.Datas
                   where x.Bar.Name.Equals(barName) &&
                         x.Something.Name.Equals(someName) &&
                         FooIds.Contains(x.Foo.Id) &&
                         x.Date >= startDate && 
                         x.Date <= endDate
                   select x).Distinct();

这不是我所期望的。我想通过三个属性选择不同的记录,比如Foo, BarSomething,但返回整个对象。我如何使用LINQ做到这一点?

LINQ to SQL选择Distinct by Multiple Columns并返回整个实体

您可以使用group by与您想要区分的属性,然后选择每个组的第一项:

determinantData = (from x in dbContext.Datas
                   where x.Bar.Name.Equals(barName) &&
                         x.Something.Name.Equals(someName) &&
                         FooIds.Contains(x.Foo.Id) &&
                         x.Date >= startDate && 
                         x.Date <= endDate
                   group x by new { x.Foo, x.Bar, x.Something } into market 
                   select market).Select( g=> g.First());