gpt4 book ai didi

c# - MVC 在 C# 中连接多个 2 个表并根据结果填充列表

转载 作者:行者123 更新时间:2023-11-29 19:45:19 25 4
gpt4 key购买 nike

我正在做一个学校项目,需要帮助解决我遇到的最后一个问题。

目前,我正在尝试使用 linq 和 lambda 进行多 2 多连接,然后用结果填充 IEnumerable 列表。

目的是展示每个产品的兼容游戏。

我现在的代码:

else
{

var result = (from g in db.Games
join gs in db.GameSize
on g.GameId equals gs.GameId
join s in db.Size
on gs.SizeId equals s.SizeId
join p in db.Product
on s.SizeId equals p.SizeId
select p.Size.Name);

games = db.Games
.Where(game => game.GameSize
.All(s => s.Size.Name == result.FirstOrDefault()));

}

我的想法是通过表加入并找到具有匹配的productid的gameid - 然后将它们添加到“游戏”中。

我知道这个表设计很糟糕,我只能使用 FirstOrDefault() 获得列表中的第一个结果。

有人有建议或解决方案可以帮助我吗?谢谢。

请问我是否没有任何意义。

本质上我只是不想显示与尺寸相关的游戏。我的表格如下所示:

--SIZE
insert into size values ('Large')
insert into size values ('Medium')
insert into size values ('Small')

--GAMES
insert into games values ('Magic The Gathering')
insert into games values ('Pokemon')
insert into games values ('Dead of Winter')

--GAMESIZE (RELATION GAMES AND SIZE) (SIZEID, GAMEID)
insert into gamesize values (1, 1)
insert into gamesize values (2, 2)
insert into gamesize values (2, 3)

最佳答案

首先,您应该真正从 LINQ 转向 SQL 语法。 EF 语法更加简单且可读。例如:

var result = db.Games.Include("GameSize.Size.Product").Select(m => m.Size.Name);

其次,All 并没有像你想象的那样做。它返回一个 bool 值:如果所有项目都符合条件则返回 true,否则返回 false。您的所有 GameSize 不太可能具有相同的 Size.Name。您可能正在此处寻找Any

第三,这整件事似乎违反直觉。您将获得所有游戏并选择所有尺寸名称。然后使用该尺寸名称列表来选择具有这些尺寸名称的游戏。换句话说,您正在执行额外的查询来获取已有的结果。从结果中删除选择并将其用于游戏

长话短说,如果我正确理解您的代码,您可以将所有这些简化为一行简单的代码:

games = db.Games.Include("GameSize.Size.Product");

关于c# - MVC 在 C# 中连接多个 2 个表并根据结果填充列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41046187/

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