寻找一些关于与实体框架和linq分组的建议。
因此,我有一个表"tbl_ChatLog“,其中包含了userID和sendToUserID etc...and的数据,我试图显示每个"SendToUserID”中的“顶级1”
所以在我的UI中,它看起来是这样的:
下面代码的开始:
public static List<Chat> getChatMessage()
{
var entities = new FreeEntities();
//My ID
Business.User user = Business.User.getUserBySecurityToken();
List<Chat> chatMessages =
(
from cm in entities.tbl_ChatLog
where cm.UserID == user.uid
select new Chat
{
uid = (int)cm.UserID,
sendToUserID = (int)cm.SendToUserID,
message = cm.Message, dateAdded = (DateTime)cm.DateAdded
}
).OrderByDescending(x => x.dateAdded).ToList();
return chatMessages;
}希望你能帮我解决这件事。分组似乎总是把我甩了。
非常感谢,
泰瑞
发布于 2014-10-04 10:24:07
你可以用groupby
List<Chat> chatMessages =
(from cm in entities.tbl_ChatLog
where cm.UserID == user.uid
orderby cm.DateAdded descending
group cm by cm.sendToUserID into grp
select new Chat
{
uid = grp.FirstOrDefault().UserID,
sendToUserID = grp.Key,
message = grp.FirstOrDefault().Message,
dateAdded = grp.FirstOrDefault().DateAdded
}).ToList()这将为您提供按sendToUserID分组的表数据列表,以及包含每个属性(包括sendToUserID )的每个组的第一个条目。
发布于 2014-10-05 17:04:15
最初的问题是尝试从每个唯一的"SendToUserId“中选择第一条消息,然后按UserId进行分组,然后选择DTO是一场噩梦,但我设法完成了一项简单的工作。代码如下:
getFirstChatMessage()
{
var entities = new FreeEntities();
//User ID
Business.User user = Business.User.getUserBySecurityToken();
// Create new list of Chat
List<Chat> chatList = new List<Chat>();
var res = from c in entities.tbl_ChatLog
where c.UserID == user.uid
group c by c.UserID
into groups
select groups.OrderByDescending(p => p.DateAdded).FirstOrDefault();
foreach (var r in res)
{
chatList.Add(new Chat()
{
uid = (int)r.UserID,
sendToUserID = (int)r.SendToUserID,
message = (from m in entities.tbl_ChatLog where m.UserID == (int)r.SendToUserID
orderby r.DateAdded descending select m.Message).FirstOrDefault(),
dateAdded = (DateTime)r.DateAdded,
fullName = (from b in entities.tbl_Bio where b.UserID == (int)r.SendToUserID
select b.FirstName + " " + b.SurName).FirstOrDefault()
});
}
return chatList;
}https://stackoverflow.com/questions/26047867
复制相似问题