除运算符:如何使用它?

时间:2013-08-13 20:31:37

标签: c# linq entity-framework

我想这样做但是当我想使用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的情况下获得所有表格。

2 个答案:

答案 0 :(得分:7)

Except是一个set减法运算符 - 您可以通过提供与原始集相同类型的元素来使用它,以请求从原始集中删除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,所以除非将附件拆分在自己的表中(如果您经常在没有附件的情况下查询票证,我建议您这样做),您应该只选择您想要获得的字段: / p>

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

答案 1 :(得分:3)

您可以使用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等。这将返回包含指定列的匿名对象。

相关问题