[英]Selecting all rows based on a distinct column in Entity Framework Core
[英]How to retrive distinct rows based on a column when join in entity framework?
我想加入2个表并基于实体框架中的2列检索不同的行。
我已经在网上阅读过帖子,包括SO。
在下面的代码中,
1.我基于CurrentTurnID
键CurrentTurnID
2个表
2.我通过所需的功能过滤表
3.我通过设置选定要素的条件来过滤表格
4.我选择一列来计算所有值的总和
我只需要检索具有相同CurrentTurnID
记录。 这是我的代码:
int services = Convert.ToInt32(database.Tbl_CurrentTurn.AsNoTracking()
.Join(database.Tbl_pay.AsNoTracking(), f => f.CurrentTurnID,
s => s.CurrentTurnID, (f, s) => new
{
f.CurrentTurnOfficialID,
f.CurrentTurnID,
f.SickID,
f.Remove,
f.Payment,
f.ServicePayment,
s.isDeposit
})
.Where(w => w.SickID == SickId && w.Remove != true && w.Payment == true && w.isDeposit != true)
.Select(s => s.ServicePayment).DefaultIfEmpty(0).Sum());
如果在Select()
语句后添加Distinct()
,它将考虑ServicePayment
来过滤不同的行。
更新: 图像已附加到我的保管箱。 第二和第三条记录具有相同的CurrentTurnID
值。 因此,我只考虑其中之一。 然后在ServicePayment
列上汇总记录。 请注意,这两个记录中的其他列不同。
您可以尝试使用GroupJoin
获取该信息,而无需像这样的Distinct
:
int services = Convert.ToInt32(database.Tbl_CurrentTurn.AsNoTracking()
.GroupJoin(database.Tbl_pay.AsNoTracking(), f => f.CurrentTurnID,
s => s.CurrentTurnID, (f, s) => new {f, s})
.SelectMany(x=> x.s.DefaultIfEmpty(), (f, s) => new
{
f.CurrentTurnOfficialID,
f.CurrentTurnID,
f.SickID,
f.Remove,
f.Payment,
ServicePayment = s != null ? s.ServicePayment : 0,
s.isDeposit
})
.Where(w => w.SickID == SickId && w.Remove != true && w.Payment == true
&& w.isDeposit != true)
.Select(x=> x.ServicePayment).Sum());
这可能无法正确编译,因为我没有所有变量,并且可以使用一个小示例进行测试。
您应该只需很少的更改就能使它起作用。 我使用类似的查询来获取成本报告的列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.