我有以下select语句,它在语法上是正确的:
var accounts = from i in db.IRSBASEFLs
join vr in db.VSARules on i.VSACode equals vr.VSACode into rules
from rule in rules.DefaultIfEmpty()
select new ImporterAccount(i, rule, RuleType.Liquidity);
但是,这会引发:
Only parameterless constructors and initializers are supported in LINQ to Entities.
我尝试添加一个“构建器”类来返回一个新的ImporterAccount,但这也失败了,这次是:
LINQ to Entities does not recognize the method 'IrsalDAL.ImporterAccount CreateImporterAccount(IrsalDAL.IRSBASEFL, IrsalDAL.VSARule, IrsalUtilities.RuleType)' method, and this method cannot be translated into a store expression.
我需要在构造函数中执行计算,所以我对如何实现这一点感到困惑?
当类不属于我的实体模型时,为什么会抛出L2E异常?
如何返回新对象并对其进行计算?
答案 0 :(得分:0)
我不确定您的问题的解决方案是什么,但您可以解决这个问题:
var tempAccounts = from i in db.IRSBASEFLs
join vr in db.VSARules on i.VSACode equals vr.VSACode into rules
from rule in rules.DefaultIfEmpty()
select new { VarI = i, Rule = rule, Liquidity = RuleType.Liquidity};
var accounts = tempAccounts.Select(x => new ImporterAccount(x.VarI, x.rule, x.Liquidity));
希望有所帮助:)
编辑1: 关于“关闭现有数据读取器错误”,A google search returns many results,第一个是SO question。接受的答案是:
这不是关闭连接。 EF正确管理连接。 我对这个问题的理解是有多个数据 检索命令在单个连接上执行(或单个命令 具有多个选择)而下一个DataReader在第一个之前执行 一个人完成了阅读。避免异常的唯一方法是 允许多个嵌套的DataReaders =打开 MultipleActiveResultSets。总是发生这种情况的另一种情况是 当你遍历查询结果(IQueryable)时,你会 在迭代内触发加载实体的延迟加载。