Linq查询并获得聚合结果+额外信息

时间:2011-02-15 18:11:54

标签: c# .net linq linq-to-entities

我正在创建一个linq查询来获取一些将返回电子邮件列表和其他信息的数据。

我创建了查询,以便获取所需的电子邮件和信息。问题是,超过1封电子邮件的信息可能相同。

我想知道获取结果集的linq方法是什么,这样可以返回类似

的内容
email1@domain.com,email2@domain.com  |   INFO
email3@domain.com  |   INFO2
email4@domain.com,email5@domain.com,email6@domain.com,email3@domain.com  |   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(因为它可能对应于超过1封电子邮件),所以我得到了不必要的数据。之后,我可以在这个结果集中进行循环,并为每个信息获取与之对应的电子邮件列表,但当然我希望在可能的情况下获得更高效的内容和linq。

1 个答案:

答案 0 :(得分: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)) });