Entity Frameworkで ‘System.Object’型の定数値を作成できません

asp.net c# entity-framework
Entity Frameworkで ‘System.Object’型の定数値を作成できません

aspnet_Membership`テーブルと多対1の関係を持つ UserTenders`という名前のテーブルがあります。 + EntityFramework 4.0を使用していますが、このようなことをしようとするとエラーになります。

var tenders = ctx.UserTenders
    .Where(tender => tender.HasAdminApproved.Equals(true))
    .ToList();

エラーは

_
System.NotSupportedException + ‘System.Object’型の定数値を作成できません。 +このコンテキストでは、プリミティブ型( ‘Int32、String、Guidなど)のみがサポートされています。
_

以下のこのスニペットは機能します。

var tenders = ctx.UserTenders.ToList();

私のコードで何が間違っているのでしょうか? とても些細なことを見逃しているように感じます。

「ビット」フィールド「HasAdminApproved」が「true」であるすべての行をフィルタリングしたい

  19  0


ベストアンサー

交換してみてください

.Where(tender => tender.HasAdminApproved.Equals(true))

と:

.Where(tender => tender.HasAdminApproved == true)

または、以前に@Ladislav Mrnkaによって提案されたように、フィールドが「bool」の場合は?

.Where(tender => tender.HasAdminApproved)

30


@Ladislavは正しい答え( .Where(tender ⇒ tender.HasAdminApproved))を伝えましたが、なぜこのメッセージを受け取るのか疑問に思うかもしれません。

`System.Boolean.Equals(Object obj)`を呼び出そうとしています。 したがって、定数 `true`をボックス化しています。 そしてメッセージが言うように、L2Eは `System.Object`のような非プリミティブ型のconstをサポートしていません。 それゆえエラーです。

19


別の問題によって引き起こされた同じ例外がありました:文字と定数として使用される文字列。 私の選択は次のようになりました:

from p in Person
select new Foo
{
  FullName = p.FirstName + ' ' + p.LastName
}

クエリの他の場所にあったブール条件(つまり、 「where p.IsActive」)は正常に機能しました。 文字列の使用に切り替える必要がありました。

from p in Person
select new Foo
{
  FullName = p.FirstName + " " + p.LastName
}

これは明らかにOPの質問に対する答えではありませんが、文字/文字列の問題で同様の質問を見つけることができなかったので、他の人の利益のために投稿したかったです。

6


指摘したいのですが、tender.HasAdminApproved.HasValue.Equals(true))を使用することもできます…​ これは、boolがnullを許可するときに機能します

2


タイトルとURLをコピーしました