![](/img/trans.png)
[英]Linq to Entities - “Unable to create a constant value of type '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
字段HasAdminApproved
為true
的行
嘗試更換
.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.