gpt4 book ai didi

c# - 奇怪的 LINQ 到实体异常

转载 作者:IT老高 更新时间:2023-10-28 23:42:09 25 4
gpt4 key购买 nike

我正在使用一个 LINQ 语句,它从各种表中选择我需要填写一些 Post/Post Comment 样式记录的信息。我收到一个有趣的异常,说当我尝试迭代记录集时对象必须实现 IConvertible。有趣的是,它似乎只发生在我用来保存数据的匿名类型包含超过 2 个泛型集合时。

//select friend timeline posts posts
var pquery = from friend in fquery
join post in db.game_timeline on friend.id equals post.user_id
//join user in db.users on post.friend_id equals user.id into userGroup
//join game in db.games on post.game_id equals game.game_id into gameGroup
select new
{
Friend = friend,
Post = post,

Game = from game in db.games
where game.game_id == post.game_id
select game,

Recipient = from user in db.users
where user.id == post.user_id
select user,

Comments = from comment in db.timeline_comments
where comment.post_id == post.id
join users in db.users on comment.user_id equals users.id
select new { User = users, Comment = comment }
};

(注意:我使用的是 MYSQL 连接器/网络,因此 LINQ 语句本身不支持 Take 和 FirstOrDefault 之类的东西,我选择在迭代期间使用这些方法,因为它不会在那里引发异常)

问题是,当所有 3 个字段(游戏、收件人和评论)都存在时。我得到异常“对象必须实现 IConvertible”。但是,如果我删除了 3 个字段分配中的任何一个(不管是哪一个),它都可以正常工作。有人知道这里发生了什么吗?

提前致谢!

瑞恩。

最佳答案

这是一个猜测,但我认为您的匿名类型可能试图 duck-type当您有两个以上的查询时,枚举。如果发生这种情况,那么您将收到关于未实现 IConvertible 的提示,因为枚举实现了 IConvertible,并且您的匿名类型(现在从枚举派生)没有实现接口(interface)。

关于c# - 奇怪的 LINQ 到实体异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5903506/

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