gpt4 book ai didi

C# linq group by 在同一实体中的不同键上

转载 作者:行者123 更新时间:2023-11-30 12:13:50 26 4
gpt4 key购买 nike

我已经研究了一段时间了,就是搞不懂。我是 Linq、C# 和这些 Lambda 的新手。

我想做的是根据每个实体的两个属性对实体进行分组。这是一个消息实体:

Message
{
int UserId; //The user generating the message
int UserIdTo; //The receiver of the message
|...| // Other stuff
}

所以,我希望这些 UserId=5, UserIdTo=6 和 UserId=6, UserIdTo=5 在同一个组中。

这是我的开始:

var groupList = (from m in db.Messages
where m.UserId == userId || m.UserIdTo == userId
join u in db.Users on m.UserId equals u.UserId
join w in db.Users on m.UserIdTo equals w.UserId
orderby m.MessageTimestamp descending
select new DomMessage
{
MessageId = m.MessageId,
MessageContent = m.MessageContent,
MessageTimestamp = m.MessageTimestamp,
UserId = m.UserId,
UserIdTo = m.UserIdTo,
ScreenName = u.ScreenName,
ScreenName2 = w.ScreenName
}).GroupBy(m=>m.UserId == userId)
.ToList();

这是按 UserId 进行分组的第一步,但我一直在尝试扩展它,以便在结果组中的任何 UserId 值等于 UserIdTo 的地方将其添加到该组中?

编辑:我需要将结果放入列表,因为我还需要用它做其他事情...

谢谢!

最佳答案

试试这个:

var payload = new[] 
{
new{ To = 1, From = 2, Message = "msj1" },
new{ To = 1, From = 2, Message = "msj2" },
new{ To = 2, From = 1, Message = "msj3" },
new{ To = 4, From = 1, Message = "msj4" },
new{ To = 1, From = 3, Message = "msj5" }
};


var groupped = payload.Select(x => new { Key = Math.Min(x.To, x.From) + "_" + Math.Max(x.To, x.From), Envelope = x }).GroupBy(y => y.Key).ToList();

foreach (var item in groupped)
{
Console.WriteLine(String.Format(@"Group: {0}, messages:", item.Key));

foreach (var element in item)
{
Console.WriteLine(String.Format(@"From: {0} To: {1} Message: {2}", element.Envelope.From, element.Envelope.To, element.Envelope.Message));
}
}

关于C# linq group by 在同一实体中的不同键上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10917484/

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