我想编写一个 LINQ 查询来检查我的
User
对象中是否存在重复的 InfoObject
数据。
在下图中,我想按
Code
(即 XYZ
)进行分组,并检查该组中是否有一个 User
具有多个 Type
。用户模型包含 Name
(例如 John)和 Value
(1 表示已选择)。
我的模型类如下:
public class InfoObject
{
public string Code { get; set; }
public string Type { get; set; }
public List<User> Users { get; set; }
}
public class User
{
public string Name { get; set; }
public string Value { get; set; }
}
无效案例: John 不允许同时拥有 A 和 B 类型
Code Type John Luke Tim
XYZ A 1 1 -
XYZ B 1 - 1
有效案例:每个用户只能有一种类型
Code Type John Luke Tim
XYZ A - 1 -
XYZ B 1 - 1
实现此目的的正确 LINQ 查询是什么?谢谢!
您可以展平
InfoObject
层次结构,然后按用户名分组并保留具有超过 1 个唯一代码的项目:
IEnumerable<InfoObject> data = ...;
var invalidUserNames = data
// flatten with SelectMany:
.SelectMany(o => o.Users
.Where(user => user.Value == "1") // assuming you want to check only "selected"
.Select(user => (user.Name, Obj: o)))
.GroupBy(t => t.Name) // assuming Name uniquely identifies user
.Select(gr => (Name: gr.Key, Count: gr.Select(t => t.Obj.Code).Distinct().Count()))
.Where(t => t.Count > 1)
.Select(t => t.Name)
.ToArray();
您可以操作
Select
来仅公开最终结果所需的数据。