gpt4 book ai didi

c# - Linq 连接返回重复结果

转载 作者:太空狗 更新时间:2023-10-30 01:30:24 25 4
gpt4 key购买 nike

我正在使用 LINQ 尝试获取角色的所有衣服。

我的查询是这样的:

var characterList = from characters in ContextFactory.Instance.Characters
where characters.UserId == user.Id

join traits in ContextFactory.Instance.CharacterTraits
on characters.Id equals traits.CharacterId
join clothes in ContextFactory.Instance.CharacterClothes
on characters.Id equals clothes.CharacterId
select new {
characters.Id,
characters.Name,
characters.Gender,
characters.Level,
characters.Money,
characters.Bank,
characters.LastLogin,
characters.PlayedTime,
traits,
clothes };

然后我将其序列化以在 javascript 中用作 JSON。

此代码为我拥有的每件衣服返回一个用户,我希望它将所有衣服分组到一个数组中。我怎么能那样做?

当前结果:

Image

谢谢

最佳答案

为此,您需要使用 GroupJoin : 注意添加了 into在加入结束时

var characterList = from characters in ContextFactory.Instance.Characters
where characters.UserId == user.Id
join t in ContextFactory.Instance.CharacterTraits
on characters.Id equals t.CharacterId into traits
join c in ContextFactory.Instance.CharacterClothes into clothes
on characters.Id equals c.CharacterId
select new { /* As before */ }

在 MSDN 上阅读更多信息:Perform Grouped Joins

请注意,如果您使用的是 EF,则无需编写联接。正确定义导航属性并使用 Include将以更少的工作量为您提供您正在寻找的东西。


最后,请注意即使有 Where条件这将返回 IEnumerable<>结果。如果您只想要一条包含所有这些信息的记录,那么在末尾添加一个 FirstOrDefault或者更好的是删除 where查询中的子句并执行:

var character = (from characters in ContextFactory.Instance.Characters
join t in ContextFactory.Instance.CharacterTraits
on characters.Id equals t.CharacterId into traits
join c in ContextFactory.Instance.CharacterClothes into clothes
on characters.Id equals c.CharacterId
select new { /* As before */ }).FirstOrDefault( x=> x.id = user.Id);

关于c# - Linq 连接返回重复结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45272259/

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