在LINQ中初始化新对象的问题

时间:2011-12-30 16:02:30

标签: c# linq-to-entities

此代码构建没有问题但在执行时失败:

var query =
    _db.STEWARDSHIP
        .OrderByDescending(r => r.VisitDate)
        .Where(r => SiteId == null || r.SiteAssoc.Id == iSiteId)
        .Where(r => r.MarkedForDeletion == false)
        .Select(r => new SearchResults(r.Id, 
                                       r.SiteAssoc.Name, 
                                       r.VisitDate, 
                                       r.VisitTypeValAssoc.Description));

错误消息是:

Only parameterless constructors and initializers are supported in LINQ to Entities.

我在这里做错了什么?我必须将info传递给构造函数以构建SearchResults对象。有没有办法做到这一点,或者我必须使这个步骤为两步,我得到结果然后迭代结果来创建新对象?

更新

将选择更改为此可解决问题:

 .Select(r => new SearchResults(){Id = r.Id, 
                                 Name = r.SiteAssoc.Name, 
                                 VisitDate = r.VisitDate, 
                                 VisitType = r.VisitTypeValAssoc.Description});

2 个答案:

答案 0 :(得分:1)

试试这个

 .OrderByDescending(r => r.VisitDate)
        .Where(r => SiteId == null || r.SiteAssoc.Id == iSiteId)
        .Where(r => r.MarkedForDeletion == false)
        .Select(r => new SearchResults()
                                       {
                                       ID = Ir.Id, 
                                       Name = r.SiteAssoc.Name, 
                                       VisitDate = r.VisitDate, 
                                       Description = r.VisitTypeValAssoc.Description
                                       });

答案 1 :(得分:1)

  

可以在查询之外创建实体并将其插入到数据中   使用DataContext存储。然后,您可以使用查询检索它们。   但是,您无法将实体创建为查询的一部分。

请参阅此帖子Explicit construction of entity type '###' in query is not allowed.

LINQ不允许在select语句中显式构造对象。