2011-08-10 35 views
1

所以,我有以下LINQ查询:LINQ查询不能选择数据到一个自定义类对象

var data= (from p in _db.P 
      join t in _db.TP on 
      p.Id equals t.PId 
      select 
        new TPE{ 
          PId= t.PId, 
          TId= t.Id 
          } 
      ).ToList(); 

      return data; 

但是当我运行它,它给了我一个错误:

The entity or complex type 'TPE' cannot be constructed in a LINQ to Entities query. 

我我看过其他的LINQ查询,但是我不知道为什么我的查询不起作用。任何见解?

回答

6

这里最简单的方法是提取到一个匿名类型,然后通过AsEnumerable做处理其余部分:

return (from p in _db.P 
     join t in _db.TP on p.Id equals t.PId 
     select new { t.PId, t.Id }).AsEnumerable() 
     .Select(x => new TPE { PId = x.PId, TId = x.Id }) 
     .ToList(); 

或全部的扩展方法的语法:

return _db.P.Join(_db.TP, p => p.Id, t => t.PId, 
       (p, t) => new { t.PId, t.Id }) 
      .AsEnumerable() 
      .Select(x => new TPE { PId = x.PId, TId = x.Id }) 
      .ToList(); 
+0

啊,那工作。非常感谢!另外,我发现我的问题是什么。我将它映射到一个实体框架对象,显然你不能在ADO.NET中做到这一点。见http://stackoverflow.com/questions/5325797/the-entity-cannot-be-constructed-in-a-linq-to-entities-query –