gpt4 book ai didi

entity-framework - "Unable to create a constant value of type .. Only primitive types are supported ..' ' 在 EF 查询中?

转载 作者:行者123 更新时间:2023-12-04 07:22:38 24 4
gpt4 key购买 nike

我有解决此问题的方法,但如果有人能解释为什么会发生这种情况以及我将如何为我的解决方法不可行的大型数据集设计它,我将不胜感激。

完整的错误是:无法创建“THPT_Razor.Models.WinType”类型的常量值。此上下文仅支持基本类型(“例如 Int32、String 和 Guid”)。

我正在使用 EF v4.0。

注释行是有问题的代码,解决方法是“For 循环”

提前谢谢你。

List<WinType> _atype = db.WinTypes.Where(wt => wt.IsWin == false).ToList();
List<WinType> _wtype = db.WinTypes.Where(wt => wt.IsWin == true).ToList();
string test = _wtype.Where(wt => wt.Value ==0).Select(wt => wt.Description).SingleOrDefault();
List<WinCheckDetails> wcd = db.Wins.Include("UserProfiles").Where(w => w.venueLogId == logid).Select(w => new WinCheckDetails
{
//awarddesc = w.atypeid.HasValue ? _atype.Where( wt=> wt.Value == w.atypeid).Select(wt => wt.Description).SingleOrDefault():string.Empty,
//windesc = _wtype.Where(wt => wt.Value == w.typeid).Select(wt => wt.Description).Single(),
atypeid = w.atypeid,
typeid = w.typeid,
WinId = w.WinId,
other = w.other,
posterid = w.posterid,
confirmed = w.confirmed,
posttime = w.posttime,
game = w.game,
playerid = w.UserProfile.PlayerID,
firstname = w.UserProfile.FirstName,
lastname = w.UserProfile.LastName,
fullname = w.UserProfile.FirstName + " " + w.UserProfile.LastName
}).OrderBy(o => o.game).ToList();
foreach (WinCheckDetails wc in wcd)
{
wc.awarddesc = _atype.Where(wt => wt.Value == wc.atypeid).Select(wt => wt.Description).SingleOrDefault();
wc.windesc = _wtype.Where(wt => wt.Value == wc.typeid).Select(wt => wt.Description).SingleOrDefault();
}

最佳答案

_atype_wtypeWinType 在内存中 的列表,因为您正在应用 ToList() 到查询。对于数据库查询,它们是常量 值的集合,因为要在数据库中执行查询,它们必须作为内存中的值传输到数据库服务器。 EF 不支持将此类常量值或值集合从内存传输到数据库除非它们是基本类型的值(例如int)。这就是您获得异常的原因。

您是否尝试使用 _atype_wtype 作为 IQueryable 而不是列表:

IQueryable<WinType> _atype = db.WinTypes.Where(wt => !wt.IsWin);
IQueryable<WinType> _wtype = db.WinTypes.Where(wt => wt.IsWin);

List<WinCheckDetails> wcd = db.Wins
.Where(w => w.venueLogId == logid)
.Select(w => new WinCheckDetails
{
awarddesc = w.atypeid.HasValue
? _atype.Where(wt=> wt.Value == w.atypeid)
.Select(wt => wt.Description).FirstOrDefault()
: string.Empty,
windesc = _wtype.Where(wt => wt.Value == w.typeid)
.Select(wt => wt.Description).FirstOrDefault(),

// ... (unchanged)
}).OrderBy(o => o.game).ToList();

我已经删除了 Include,因为当您使用 Select 执行投影时,它无论如何都会被忽略。此外,我已将 SingleOrDefaultSingle 替换为 FirstOrDefault,因为两者在投影中均不受支持(First 也不支持) , 仅支持 FirstOrDefault

我不确定这是否可行。但它应该删除您的异常(但也许您会得到另一个......)。

关于entity-framework - "Unable to create a constant value of type .. Only primitive types are supported ..' ' 在 EF 查询中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11654822/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com