返回可用性记录

时间:2018-04-03 12:10:17

标签: c# entity-framework-6 linq-to-entities

我有一个场景,Item通过复合表链接到另一个EntityEntity的{​​{1}}值为1 =全周,2 =周中或3 =周末。

我想要返回所有可用的Period,或者没有Item的链接,或者链接到周中或周末但不是两者都有。假设EntityItem链接到整周时间,它无法链接到另一个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);

2 个答案:

答案 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);