C# 字段值相同的输出记录
这个话题可能会有疑问。我在下面的另一个场景中问道,答案是。当我像这样编辑我的主题并再次提问时,德维凯·姆巴·奥卢说我应该在一个新的主题中提问。所以我不得不用一个新的话题来问这个问题 以下是数据架构示例: 我有一个从SQLite数据库获取的列表,如下所示:C# 字段值相同的输出记录,c#,linq,lambda,C#,Linq,Lambda,这个话题可能会有疑问。我在下面的另一个场景中问道,答案是。当我像这样编辑我的主题并再次提问时,德维凯·姆巴·奥卢说我应该在一个新的主题中提问。所以我不得不用一个新的话题来问这个问题 以下是数据架构示例: 我有一个从SQLite数据库获取的列表,如下所示: var decisions = _db.decisions.Where(x => x.CAT_ID == Cat.Id).ToList(); 如果此列表中的REC\u ID字段的值相同,我希望在foreach循环中输出这些记录,并将其
var decisions = _db.decisions.Where(x => x.CAT_ID == Cat.Id).ToList();
如果此列表中的REC\u ID
字段的值相同,我希望在foreach循环中输出这些记录,并将其余记录输出到单独的foreach循环。例如,在上面的列表中,REC\u ID
13个在循环中,REC\u ID
5个在循环中,REC\u ID
7个在循环中,其他在最后一个循环中
根据评论编辑:
我想将具有多个相同值的值和剩余值分开。在我们的示例中,应该将ID“{1,2,3}
{4,5}
{6,7}
和{8,9}
分开
我想将具有多个相同值的值和剩余值分开。在我们的示例中,应该将ID“{1,2,3}
{4,5}
{6,7}
和{8,9}
分开
好的,然后您可以根据REC_ID
进行分组,并检查组的Count()
是否大于1(给您“多个相同的值”)或等于1(给您“剩余值”),后者必须再次展平,以使它们回到同一集合中
List<IGrouping<int, MyClass>> recIdGroupsMultipleEntries = decisions.GroupBy(x => x.REC_ID)
.Where(g => g.Count() > 1).ToList();
List<MyClass> recIdSingleEntries = list.GroupBy(x => x.REC_ID)
.Where(g => g.Count() == 1)
.SelectMany(flat => flat).ToList();
List recIdGroupsMultipleEntries=decisions.GroupBy(x=>x.REC_ID)
其中(g=>g.Count()>1.ToList();
List recIdSingleEntries=List.GroupBy(x=>x.REC\u ID)
.其中(g=>g.Count()==1)
.SelectMany(flat=>flat).ToList();
下面是一个示例程序,其输出显示:
void Main()
{
List<MyClass> list = new List<MyClass>();
for (int i = 1; i < 10; i++)
{
list.Add(new MyClass { ID = i, TITLE = $"title {i}", CAT_ID = 81});
}
list[0].REC_ID = 13;
list[1].REC_ID = 13;
list[2].REC_ID = 13;
list[3].REC_ID = 5;
list[4].REC_ID = 5;
list[5].REC_ID = 7;
list[6].REC_ID = 7;
list[7].REC_ID = 1;
list[8].REC_ID = 2;
List<IGrouping<int, MyClass>> recIdGroupsMultipleEntries = list.GroupBy(x => x.REC_ID).Where(g => g.Count() > 1).ToList();
List<MyClass> recIdSingleEntries = list.GroupBy(x => x.REC_ID)
.Where(g => g.Count() == 1)
.SelectMany(flat => flat).ToList();
foreach (var group in recIdGroupsMultipleEntries)
{
Console.WriteLine($"REC_ID: {group.Key} || {string.Join(", ", group.Select(x => x.ID))}");
}
Console.WriteLine($"REC_ID: {recIdSingleEntries.Select(x => x.REC_ID).First()} || {string.Join(", ", recIdSingleEntries.Select(x => x.ID))}");
}
void Main()
{
列表=新列表();
对于(int i=1;i<10;i++)
{
添加(新的MyClass{ID=i,TITLE=$“TITLE{i}”,CAT_ID=81});
}
列表[0]。记录ID=13;
列表[1]。记录ID=13;
列表[2]。记录ID=13;
列表[3]。记录ID=5;
列表[4]。记录ID=5;
列表[5]。记录ID=7;
列表[6]。记录ID=7;
列表[7]。记录ID=1;
列表[8]。记录ID=2;
List recIdGroupsMultipleEntries=List.GroupBy(x=>x.REC_ID).Where(g=>g.Count()>1.ToList();
List recIdSingleEntries=List.GroupBy(x=>x.REC\u ID)
.其中(g=>g.Count()==1)
.SelectMany(flat=>flat).ToList();
foreach(recIdGroupsMultipleEntries中的变量组)
{
Console.WriteLine($“REC_ID:{group.Key}{string.Join(“,”,group.Select(x=>x.ID)));
}
Console.WriteLine($“REC_ID:{recIdSingleEntries.Select(x=>x.REC_ID).First()}|{string.Join(“,”,recIdSingleEntries.Select(x=>x.ID)));
}
输出:
记录ID:13 | | 1、2、3记录ID:5 | | 4,5
记录ID:7 | 6,7
记录ID:1 | | 8,9
所以基本上你想分离所有不同的
REC\u ID
值?我理解正确了吗?@MongZhu-没有。我想将那些具有多个相同值的值和剩余值分开。在我们的示例中,应该将ID“{1,2,3}
{4,5}
{6,7}
和{8,9}
分开。因为它们都有相同的CAT_ID。这正是我的代码所做的。我将编辑它,并添加一个带有输出的示例程序,以向您展示我现在更了解您了,我想:)您希望剩余部分在单个列表中展平。我做了第二次编辑,展示了如何将分组展平。有一个look@MongZhu-非常感谢。我正在尝试,我会让你知道结果。非常感谢你的完美解决方案。