Linq 无法创建常量值-只允许基本类型或枚举类型
我在这里看到了一些与此异常相关的问题,但没有一个让我理解问题的根本原因。我们还有一个Linq 无法创建常量值-只允许基本类型或枚举类型,linq,linq-to-sql,linq-to-entities,Linq,Linq To Sql,Linq To Entities,我在这里看到了一些与此异常相关的问题,但没有一个让我理解问题的根本原因。我们还有一个 var testquery = ((from le in context.LoanEMIs.Include("LoanPmnt") join lp in context.LoanPmnts on le.Id equals lp.LoanEMIId where lp.PmntDtTm < date && lp.IsPaid == false && le.IsAc
var testquery =
((from le in context.LoanEMIs.Include("LoanPmnt")
join lp in context.LoanPmnts on le.Id equals lp.LoanEMIId
where lp.PmntDtTm < date && lp.IsPaid == false
&& le.IsActive == true && lp.Amount > 0
select new ObjGetAllPendingPmntDetails
{
Id = lp.Id,
Table = "LoanEMI",
loanEMIId = lp.LoanEMIId,
Name = le.AcHead,
Ref = SqlFunctions.StringConvert((double)le.FreqId),
PmntDtTm = lp.PmntDtTm,
Amount = lp.Amount,
IsDiscard = lp.IsDiscarded,
DiscardRemarks = lp.DiscardRemarks
}).DefaultIfEmpty(ObjNull));
List<ObjGetAllPendingPmntDetails> test = testquery.ToList();
我需要这个查询正常工作,因为它与其他5个查询一起调用了Union()
。全部返回相同的ObjGetAllPendingPmntDetails
列。但是有一些问题,因为这个查询没有满足条件的数据,并且上面共享了异常
由于我无法理解问题的根本原因,因此非常感谢您的建议。@AndrewCoonce是正确的,这里的罪魁祸首是
.DefaultIfEmpty(ObjNull)
。实体框架将DefaultIfEmpty
转换为类似于
当([Project1].[C1]为空时,@param ELSE[Project1].[Value]结束为[C1]
…但是无法强制将ObjGetAllPendingPmntDetails
的实例转换为可以替代@param
的内容,因此会出现异常
如果您将DefaultIfEmpty
调用移动到ToList
之后,它应该可以正常工作(尽管如果您真的想要一个具体的列表实例,您需要在之后再次调用ToList
)您的。DefaultIfEmpty(ObjNull)
代码在我看来是可疑的。看起来没有必要,因为您正在对结果调用.ToList()
。是否确实希望“未找到匹配项”案例尝试返回长度为1的列表?
ObjGetAllPendingPmntDetails ObjNull = new ObjGetAllPendingPmntDetails()
{ Id = 0, Table = "-", loanEMIId = 0, Name = "-", Ref = "-",
PmntDtTm = Convert.ToDateTime("01-01-1900"),
Amount = 0, IsDiscard = false, DiscardRemarks = "" };