3

ここでこの例外に関連する質問をいくつか見ましたが、問題の根本原因を理解できるものはありませんでした。では、もう 1 つ...

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();

このクエリでは、次の例外メッセージが表示されます -

タイプ の定数値を作成できませんCashVitae.ObjGetAllPendingPmntDetails。このコンテキストでは、プリミティブ型または列挙型のみがサポートされています。

変換する SQL 関数ステートメントを追加した後、この例外が発生しました。le.FreqIdこれは、LINQ 式ストアで認識されないためです。bytestringToString()

ObjGetAllPendingPmntDetailsデータをテーブルにバインドするためにコードで何度も使用されているため、追加された私のモデルの部分クラスです。IDlong の s、10 進数の 'Amount'、boolPmntDtTmの'Amount' の両方があり、残りはすべて 'Ref' を含む文字列です。DatetimeIsDiscard

現在、条件を満たすデータがないため、結果が得られません。null を処理しようとしているときに、次のようにすべてのプロパティを追加DefaultIfEmpty(ObjNull)して初期化しました。ObjNull

ObjGetAllPendingPmntDetails ObjNull = new ObjGetAllPendingPmntDetails()
{ Id = 0, Table = "-", loanEMIId = 0, Name = "-", Ref = "-",
  PmntDtTm = Convert.ToDateTime("01-01-1900"),
  Amount = 0, IsDiscard = false, DiscardRemarks = "" };

Union()このクエリは、他の 5 つのクエリで呼び出されているため、正常に動作する必要があります。ObjGetAllPendingPmntDetailsすべて同じ列を返します。ただし、このクエリには条件と Exception Shared Above を満たすデータがないため、いくつかの問題があります。

問題の根本的な原因を理解できないため、提案をいただければ幸いです。

4

1 に答える 1

3

@AndrewCoonceは正しいです、これ.DefaultIfEmpty(ObjNull)が犯人です。Entity FrameworkはDefaultIfEmpty次のようになります...

CASE WHEN ([Project1].[C1] IS NULL) THEN @param ELSE [Project1].[Value] END AS [C1]

ObjGetAllPendingPmntDetails...しかし、 のインスタンスをの代わりになるものに強制する方法はない@paramため、例外が発生します。

DefaultIfEmpty呼び出しを の後に移動すると、ToList正しく動作するはずです (ただし、ToList実際に具体的なリスト インスタンスが必要な場合は、その後に再度呼び出す必要があります)。

于 2013-07-25T00:42:24.897 に答える