0

我在我的存储库中有以下调用,我返回 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))
}
4

1 回答 1

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 无法对这些做出任何有效的假设……除了在返回实例时调用构造函数。

于 2009-11-23T16:23:20.030 回答