![](/img/trans.png)
[英]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.