2012-08-23 88 views
1

我有一个消息列表具有成员:LinqToEntities分组

文本= m.Text,用户= m.User,日期= m.Date

此列表包括所有像

消息
Text = "How Are You" 
User = "Michael" 
Date = "1/1/12" 

Text = "Well Done" 
User = "Michael" 
Date = "2/1/12" 

Text = "Who?" 
User = "John" 
Date = "1/1/12" 

我好心需要从中将不会从同一人显示多个消息,并只给出了最后一个喜欢的人获得最新消息:

Text = "Well Done" 
User = "Michael" 
Date = "2/1/12" 

Text = "Who?" 
User = "John" 
Date = "1/1/12" 

正如你所见;我想消除来自同一个人的以前的消息。

我目前正在使用:

var messages = (from m in mList select new 
{ 
Text = m.Text, 
User = m.User, 
Date = m.Date 
}).ToList(); 

我要补充什么这个查询实现我的目标是什么?

谢谢!

回答

2
var messages = (from m in mList select new 
{ 
    Text = m.Text, 
    User = m.User, 
    Date = m.Date 
}) 
.GroupBy(m => m.User) 
.Select(g => g.OrderByDescending(m => m.Date).First()) 
.ToList(); 
+0

感谢大卫!这很容易:) – MrGorki

+0

@MrGorki:正如TheHe指出的那样,这里的OrderBy将假定一个实际的日期而不是日期字符串。我会建议你解析它到一个日期。如果你不喜欢解析的想法,但知道你可以依赖列表按时间顺序排列,那么你可以使用'.Last()'来代替列表中的最后一个条目,为每个人选择用户。 –

+0

唯一的失真是.First(),但它与.FirstOrDefault()一起工作没有任何问题..太棒了!再次感谢。 – MrGorki

0
try{ 
    var messages = (from m in mList select new 
    { 
     Text = m.Text, 
     User = m.User, 
     Date = DateTime.Parse(m.Date) 
    }) 
    .GroupBy(x => x.User).Select(x => x.First()).ToList(); 
}catch{} 

因为日期是不是字符串排序...

相关问题