2011-02-15 72 views
0

我创建了一个linq查询来获取一些数据,它将返回一个电子邮件列表和一些其他信息。Linq查询并获得聚合结果+额外信息

我创建了查询,以便获取我想要的电子邮件和信息。事情是,有可能这些信息对于超过1封电子邮件来说是相同的。

我想知道什么是LINQ的方式来获取返回我像

[email protected],[email protected] | INFO 
[email protected] | INFO2 
[email protected],[email protected],[email protected],[email protected] | INFO3 

随着第一个属性是电子邮件的CSV列表一个结果。

,我现在所拥有的查询是这样的:

from user in context.Users 
join ufa in context.UFAccesses on user equals ufa.User 
join f in context.F on ufa.Feed equals f 
join fp in context.FP on f equals fp.F 
select new { thisUfa = fp.F.UFAccess.Where(ufaSearch => ufaSearch.User == user && ufaSearch.F == f).FirstOrDefault(), user.Email, fp.Title, fp.Content }; 

编辑:一些额外的信息,以帮助回答者。也许有更好的方法来做到这一点。这个问题的主要原因是,因为我几次得到这个INFO(因为它可能对应于多个电子邮件),所以我得到了必要的数据。后来,我可以在这个结果集中做一个循环,并且为每个信息获取与它对应的电子邮件列表,但是当然如果可能的话,我希望获得更高效的内容和linq。

+2

你的问题没有得到很好的措辞。您是否想知道如何将查询返回的对象格式化为字符串? – 2011-02-15 18:54:28

+0

你得到了什么不必要的数据?我不明白你需要什么? – phillip 2011-02-15 19:32:50

回答

2

这应该解决您的问题:

public class Something 
{ 
    public string Email { get; set; } 
    public string Info { get; set; } 
} 

var list = new List<Something>(); 
list.Add(new Something { Email = "email1", Info = "info1" }); 
list.Add(new Something { Email = "email2", Info = "info2" }); 
list.Add(new Something { Email = "email3", Info = "info3" }); 
list.Add(new Something { Email = "email4", Info = "info3" }); 
list.Add(new Something { Email = "email5", Info = "info3" }); 
list.Add(new Something { Email = "email6", Info = "info1" }); 

var groupedList = list.GroupBy(e => e.Info).Select(g => new { Info = g.Key, Emails = String.Join(",",g.Select(e => e.Email)) }); 

首先,我们与GroupBy(e => e.Info)分组,然后选择组键(信息),并加入电子邮件:

new { Info = g.Key, Emails = String.Join(",",g.Select(e => e.Email)) });