我有一个数据表,看起来像返回Groupedby不同LINQ值
Agency | Contact | Group
Agency1 person1 lunch runners
Agency1 person1 band
Agency1 person3 basketball
Agency2 person4 band
,我想通过代理它们分组,然后由联系人姓名。我曾尝试过使用LINQ 50种不同的方法,但碰壁了。有人可以点亮一下吗?谢谢。
我有一个数据表,看起来像返回Groupedby不同LINQ值
Agency | Contact | Group
Agency1 person1 lunch runners
Agency1 person1 band
Agency1 person3 basketball
Agency2 person4 band
,我想通过代理它们分组,然后由联系人姓名。我曾尝试过使用LINQ 50种不同的方法,但碰壁了。有人可以点亮一下吗?谢谢。
使用匿名类型:
var groups = table.AsEnumerable()
.GroupBy(r => new
{
Agency = r.Field<string>("Agency"),
Contact = r.Field<string>("Contact")
});
foreach (var agencyContactGroup in groups)
Console.WriteLine("Agency: {0} Contact: {1} Groups: {2} Count: {3}"
, agencyContactGroup.Key.Agency
, agencyContactGroup.Key.Contact
, string.Join(",", agencyContactGroup.Select(r => r.Field<string>("Group")))
, agencyContactGroup.Count());
输出与样品数据:
Agency: Agency1 Contact: person1 Groups: lunch runners,band Count: 2
Agency: Agency1 Contact: person3 Groups: basketball Count: 1
Agency: Agency2 Contact: person4 Groups: band Count: 1
collection.GroupBy(x => new { x.Agency, x.Contact })
应该这样做。这将创建一个用于密钥的匿名对象。
请注意,您必须将此一般想法应用到@TimSchmelter的答案中的DataTable中。
如果需要组的层次结构(即Agency1组有一个PERSON1组内),你可以这样做:
collection.GroupBy(x => x.Agency).Select(x => x.GroupBy(y => y.Contact));
我不认为这是对问题的正确解释。您按代理机构将联系人姓名分组,然后按代理机构分组,然后按联系人姓名分组。 – Zong
@宗正立我做了一个修改,以解决你的评论。 –
var results = db.<EntityCollection>
.ToLookup(a => a.Agency)
.ToDictionary(lu => lu.Key, lu => lu.ToLookup(lui => lui.Contact));
然后可以访问,如下所示:
results[<agencyName>][<contactName>]
这是一个对群组进行分组的算法。将它应用于您的意愿 – Moho
什么是您的预期输出? – Habib
你能展示你最好的尝试吗? –
你的意思是代理机构*,然后是合同名称*?这听起来像点菜! – Alireza