【问题标题】:except operator: How to use it?除了运营商:如何使用它?
【发布时间】:2013-08-15 15:13:24
【问题描述】:

我想这样做,但是当我想使用 except 运算符时它不起作用:

这篇文章的副本: (Retrieve an object from entityframework without ONE field)

还有这个:Exclude a field/property from the database with Entity Framework 4 & Code-First

using (var db = new DEntities())
{
    var ticket = db.Tickets
        .Include(o => o.Ticket)
        .Except(o => o.AttachmentFile)
        .Where(o => o.TicketID == ticketID).ToList();
}

我想得到没有AttachmentFile 的所有表格。

【问题讨论】:

  • 定义“不工作”是你得到你不期望的结果还是异常。如果是异常,请edit your original question 并将异常详细信息的副本放在那里。有一个按钮,上面写着“Copy Exception Details to Clipboard”,可以让你轻松复制它
  • 投反对票没用。我在问一个问题并获得了反对票。
  • (我不是投反对票的人)投反对票代表:“此问题未显示任何研究成果;不清楚或无用”。我同意反对者的观点,即您的问题属于“尚不清楚”类别。 “我想在没有 AttachmentFile 的情况下获取所有表格。”听起来就像你想要 AttachmentFile 为空的结果。此外,您尝试的解决方案也强化了这一假设。
  • 查看编辑帖子:我和链接的帖子有同样的问题

标签: c# linq entity-framework


【解决方案1】:

Except 是一个集合减法运算符 - 您可以通过提供与原始集合相同类型的元素来使用它来请求从原始集合中删除 Except 集合的所有元素。

这不是您要在这里实现的目标 - 您的任务似乎是一个简单的过滤:

ticket = db.Tickets
    .Include(o => o.Ticket)
    .Where(o => o.AttachmentFile == null && o.TicketID == ticketID)
    .ToList();

通过要求AttachmentFilenull,这排除了所有带有附件的票证。

(评论) 我只想忽略 o.attachmentFile,如果它为 null,我不想得到它。

这是不同的:EF does not support lazy loading of individual properties,因此除非附件在其自己的表中拆分(如果您经常查询没有附件的工单,我建议您这样做)您应该只选择您想要获取的字段:

ticket = db.Tickets
    .Include(o => o.Ticket)
    .Where(o => o.TicketID == ticketID)
    .Select(o => new MyObject(o.Attr1, o.Attr2, /*and so on, but no AttachmentFile */))
    .ToList();

【讨论】:

  • 我只想忽略 o.attachmentFile 如果它为空我不想得到它。我错过了理解吗?我想把它设置为null,不取数据库的值。
  • @billybob:您要么需要创建没有AttachmentFile 的新对象,要么循环遍历您的对象并将它们设置为null
  • @billybob EF 不支持延迟加载单个属性。如果您希望您的对象不带附件,请选择您想要的字段,并且不要在列表中包含附件。
【解决方案2】:

您可以使用 select 语句。

    var ticket = db.Tickets
                   .Include(o => o.Ticket)
                   .Where(o => o.TicketID == ticketID)
                   .Select( o => new { o.TicketID, o.Column1, o.Column2 }).ToList();

将 o.Column1、o.Column2 等替换为适当的列名。这将返回一个包含指定列的匿名对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多