【问题标题】:Return records with availability返回可用的记录
【发布时间】:2018-04-03 12:10:17
【问题描述】:

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

我想返回所有可用的Items,或者没有指向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);

在这种情况下,设计不应被视为问题。

型号:

Item
====
ItemID
ItemName

Entity
====
EntityID
Period

ItemEntity
==========
ItemEntity_ID
ItemID
EntityID

【问题讨论】:

  • 贴出你目前写的代码。
  • M Bakardzhiev,已编辑
  • 如果您知道如何编写 SQL 代码,您可以尝试使用 LinqPad 将其转换为 Linq 查询
  • @JordyvanEijk LINQPad 不会将 SQL 转换为 LINQ。

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


【解决方案1】:

您可以加入ItemEntity,然后计算有多少周中/周末Entitys 加入,只保留零或1 个计数Items,不包括任何Items 和fullweek @987654325 @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;

【讨论】:

  • 感谢 NetMage....这是否适合选择 ItemEntity 中没有条目的项目
  • 是的,因此 ...Count() &lt; 2 - 如果ej 为空,则计数为零。
【解决方案2】:

测试一下

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多