我有一个场景,Item
通过复合表链接到另一个Entity
。 Entity
的{{1}}值为1 =全周,2 =周中或3 =周末。
我想要返回所有可用的Period
,或者没有Item
的链接,或者链接到周中或周末但不是两者都有。假设Entity
与Item
链接到整周时间,它无法链接到另一个Entity
,或者如果链接到周中只能链接到周末,那么类推。
我已经离开加入Entity
以迎合彻底的可用性,但却难以接受其他不同的案例。
ItemEntity
在这种情况下,不应将设计视为问题。
模特:
var query = (from it in context.Items
join ie in context.ItemEntity on new { ItemID = it.ID }
equals new { ItemID = ie.ItemID } into itLeft
from itJoin in itLeft.DefaultIfEmpty()
where itJoin == null
select it);
答案 0 :(得分:1)
您可以加入ItemEntity
,然后计算周中/周末Entity
加入的次数,并且只保留0或1个Item
个,不包括任何Item
1}} s with fullweek Entity
s。
var q = from it in Items
join ie in ItemEntity on it.ItemID equals ie.ItemID into iej
let ej = from ie in iej
join e in Entity on ie.EntityID equals e.EntityID
select e
where ej.Count(e => e.Period == 2 || e.Period == 3) < 2 && !ej.Any(e => e.Period == 1)
select it;
答案 1 :(得分:0)
测试此
var query = (from it in context.Items
join ie in context.ItemEntity on new { ItemID = it.ID }
equals new { ItemID = ie.ItemID } into itLeft
from itJoin in itLeft.DefaultIfEmpty()
where itJoin != null && itJoin.ItemID == it.ItemID && ((itJoin.EntityID == 1 && (itJoin.EntityID != 2 || itJoin.EntityID != 3) || (itJoin.EntityID == 2 && itJoin.EntityID != 3) || (itJoin.EntityID == 3 && itJoin.EntityID != 2))
select it);