簡體   English   中英

無法在實體框架中創建類型為“System.Object”的常量值

[英]Unable to create a constant value of type 'System.Object' in Entity Framework

我有一個名為UserTenders的表,它與aspnet_Membership表具有多對一的關系。
我正在使用 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();

我的代碼可能有什么問題? 感覺好像我錯過了一些非常微不足道的東西。

我想過濾所有具有bit字段HasAdminApprovedtrue的行

嘗試更換

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

和:

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

或者如@Ladislav Mrnka 之前建議的那樣,如果您的字段是bool?

.Where(tender => tender.HasAdminApproved)

@Ladislav 告訴了您正確的答案( .Where(tender => tender.HasAdminApproved) ),但您可能想知道為什么會收到此消息。

您正在嘗試調用System.Boolean.Equals(Object obj) 所以你在拳擊常量true 正如消息所述,L2E 不支持非原始類型的 const,例如System.Object 因此錯誤。

我遇到了由另一個問題引起的相同異常:字符與用作常量的字符串。 我的 select 看起來像這樣:

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

我在查詢中其他地方的 boolean 條件(即“其中 p.IsActive”)工作正常。 我不得不切換到使用字符串:

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

這顯然不是 OP 問題的答案,但我無法找到與 char/string 問題類似的問題,所以我想發布它以使其他人受益。

只是想指出,您也可以使用tender.HasAdminApproved.HasValue.Equals(true))...這在bool允許空值時有效

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM