Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 无法创建常量值-只允许基本类型或枚举类型_Linq_Linq To Sql_Linq To Entities - Fatal编程技术网

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 = "" };