簡體   English   中英

Linq To SQL-具有和分組依據

[英]Linq To SQL - Having and Group By

我下面的這個查詢工作正常。 但是我想使用Linq實現它。

select u.ID, u.NAME
from Task t 
join BuildingUser bu ON bu.ID_BUILDING = t.ID_BUILDING 
join [User] u ON u.ID = bu.ID_USER
where t.ID IN (2,9) AND u.ID != t.ID_USER
group by u.id, u.name
having count(bu.ID_BUILDING) = (SELECT COUNT(t2.ID_BUILDING) FROM Task t2 WHERE t2.ID IN (2,9))

我不知道如何同時分組和使用Haveing子句。

您可以嘗試如下操作:

var ids = new[] { 2, 9 };
var results =
    from t in db.Tasks
    join bu in db.BuildingUsers on t.ID_BUILDING equals bu.ID_BUILDING
    group bu by bu.ID_BUILDING into bg
    join u in db.Users on bg.Key equals u.ID
    where ids.Contains(t.ID) && u.ID != t.ID_USER
    group u by new { u.ID, u.NAME } into g
    where bg.Count() == db.Tasks.Count(t2 => ids.Contains(t2.ID))
    select g.Key;

或者,如果您正確設置了導航屬性,則可以嘗試以下操作:

var ids = new[] { 2, 9 };
var results =
    from t in db.Tasks.Where(x => ids.Contains(x.ID))
    from u in t.BuildingUsers.SelectMany(bu => bu.Users)
                             .Where(x => x.ID != t.ID_USER)
    group u by new { u.ID, u.NAME } into g
    where t.BuildingUsers.Count() == db.Tasks.Count(x => ids.Contains(x.ID))
    select g.Key;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM