-1

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

这篇文章的副本:(从没有一个字段的实体框架中检索对象

这:使用实体框架 4 和代码优先从数据库中排除字段/属性

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

我想在没有AttachmentFile.

4

2 回答 2

7

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

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

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

AttachmentFile这通过要求to排除所有带有附件的票证null

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

这是不同的:EF 不支持延迟加载单个属性,因此除非附件在其自己的表中拆分(如果您经常在没有附件的情况下查询票证,我建议您这样做)您应该只选择您想要获取的字段:

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();
于 2013-08-13T20:34:33.040 回答
3

您可以使用选择语句。

    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 等。这将返回一个包含指定列的匿名对象。

于 2013-08-13T20:41:05.573 回答