繁体   English   中英

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

[英]Linq query and get aggregated result + extra info

我正在创建一个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。

这个应该解决你的问题:

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)进行分组,然后选择组密钥(Info)和加入的电子邮件:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM