将自定义类返回为IQueryable,因此没有“没有支持的SQL转换”错误

时间:2009-11-18 19:14:44

标签: linq-to-sql repository iqueryable

我在我的存储库中有以下调用,其中我返回Node的IQueryable(我的业务对象类)然后我在我的服务层中有一个过滤器函数,它添加到IQueryable调用并按id过滤存储库函数GetNodes。当我将FilterById作为列表返回时(因此它执行)我得到错误 - 成员'bo.Node.Id'没有支持的SQL转换。 -

在将非linq生成的类作为IQueryable返回时,有没有办法解决这个错误?

public IQueryable<bo.Node> GetNodes()
{
       return (from item in Db.Nodes select new bo.Node(item.id, 
              item.created, item.lastupdated, item.name, 
              item.parentid, item.siteid, item.userid));
}

在我的服务层

private IQueryable<bo.Node> FilterById(IQueryable<bo.Node> source, Guid id)
{
       return source.Where(i => i.Id.Equals(id))
}

1 个答案:

答案 0 :(得分:2)

不要使用Node构造函数,而是使用属性初始化:

return (
   from item in Db.Nodes select new bo.Node{
      item.id, item.created, item.lastupdated, item.name, 
      item.parentid, item.siteid, item.userid
   });

afaik通过使用构造函数,您不会在表达式中提供与其他属性匹配的任何信息。除了结果实例基于构造函数中的任何逻辑,因此没有任何有效的假设linq可以做出那些......除了在返回它的实例时调用构造函数。