C# 使用列表<;int>;按键作为linq组
这是来自LinqPad(因此是.Dump())C# 使用列表<;int>;按键作为linq组,c#,linq,grouping,C#,Linq,Grouping,这是来自LinqPad(因此是.Dump()) void Main() { var k1=新列表(){1,2,3,4,5}; var k2=新列表(){1,2,3,4,5}; var o1=newa(){k=k1,objectName=“o1”}; var o2=newa(){k=k2,objectName=“o2”}; var l=新列表 我知道为什么会发生这种情况,这是因为列表对象是独立的对象,但我想知道的是,是否有一种方法可以告诉group by使用列表的内容而不是对象实例。我成功地完成了
void Main()
{
var k1=新列表(){1,2,3,4,5};
var k2=新列表(){1,2,3,4,5};
var o1=newa(){k=k1,objectName=“o1”};
var o2=newa(){k=k2,objectName=“o2”};
var l=新列表
我知道为什么会发生这种情况,这是因为列表对象是独立的对象,但我想知道的是,是否有一种方法可以告诉group by使用列表的内容而不是对象实例。我成功地完成了以下任务:
var b = l.SelectMany(a => a.k.Select(i => new { Key = i, n = a.objectName }))
.GroupBy(i => i.Key);
我成功地完成了以下几点:
var b = l.SelectMany(a => a.k.Select(i => new { Key = i, n = a.objectName }))
.GroupBy(i => i.Key);
公共静态void Main()
{
var k1=新列表(){1,2,3,4,5};
var k2=新列表(){1,2,3,4,5};
var o1=newa(){k=k1,objectName=“o1”};
var o2=newa(){k=k2,objectName=“o2”};
var l=新列表公共静态void Main()
{
var k1=新列表(){1,2,3,4,5};
var k2=新列表(){1,2,3,4,5};
var o1=newa(){k=k1,objectName=“o1”};
var o2=newa(){k=k2,objectName=“o2”};
var l=new List您可以将数组转换为字符串
var b = l.GroupBy(o => string.Join(";", o.k))
.Select(g => new { Key = g.First().k,
n = string.Join(",", g.Select(o => o.objectName)) });
可以将数组转换为字符串
var b = l.GroupBy(o => string.Join(";", o.k))
.Select(g => new { Key = g.First().k,
n = string.Join(",", g.Select(o => o.objectName)) });
您可以使用采用自定义比较器的GroupBy
方法,并以这种方式检查列表是否相等。下面是一篇解释自定义比较器的文章:(适用于所有使用相等的LINQ方法-从比较的角度来看,GroupBy类似于本文中使用的Distinct)。我找不到好的精确副本(我很确定有很多),但如果你想以重复的方式关闭,这里有一个足够接近的问题可以开始搜索-你可以使用GroupBy
方法来使用自定义比较器,并以这种方式检查列表是否相等。下面是一篇解释自定义比较器的文章:(适用于所有使用等式的LINQ方法-从比较的角度来看,GroupBy类似于本文中使用的Distinct)。我找不到好的精确副本(我很确定有很多),但如果您想以副本形式关闭,这里有一个足够近的问题可以开始搜索-