我在c#中有一个列表:
List<Data> uData = new List<uData>();
Run Code Online (Sandbox Code Playgroud)
其中uData从UI填充为:
{
Id: 1,
Name: "Smith",
Input: "7,8",
Output: "Output1",
CreatedBy: "swallac",
CreatedON: "12/01/2018"
},
{
Id: 2,
Name: "Austin",
Input: "9,10",
Output: "Output1",
CreatedBy: "amanda",
CreatedON: "12/03/2018"
},
{
Id: 3,
Name: "Smith",
Input: "22,22",
Output: "Output2",
CreatedBy: "swallac",
CreatedON: "12/01/2018"
},
{
Id: 4,
Name: "Smith",
Input: "9,8",
Output: "Output2",
CreatedBy: "aaa",
CreatedON: "12/01/2018"
},
{
Id: 5,
Name: "Peter",
Input: "7,8",
Output: "Output3",
CreatedBy: "swallac",
CreatedON: "12/02/2018"
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是在"输出"键上搜索此列表,并找出"Input"和CreatedBy键的相应组合值中是否有重复项.
例如,在上面的示例列表中,我有三个输出:Output1,Output2,Output3.现在,对于输出值为"Output1"和"Output3"的列表,相应的"Input"和"CreatedBy"键值在此处重复.值为"7,8"和"swallac"作为组合值.这是我想强调的
为此,我尝试了以下查询:
var myList = uData.GroupBy(l => l.Ouput)
.SelectMany(g => g.GroupBy(x => (x.Input, x.CreatedBy)).Where(x => x.Count() > 1))
.SelectMany(x => x);
Run Code Online (Sandbox Code Playgroud)
这不会给我任何错误但是没有给出我想要的结果,因为它列出了所有数据.我在这里想念的是什么
- 更新 - -
之前我想要输入不应该在一个输出中重复,因为我有以下查询.
uData.GroupBy(l => l.Ouput)
.Any(g => g.GroupBy(x => x.Input).Any(x => x.Count() > 1))
Run Code Online (Sandbox Code Playgroud)
现在我想要另一个查询来检查Input和CreatedBy的组合是否在列表中重复.
我根据建议尝试了上面发布的查询和下面的查询:
uData.GroupBy(g=> new {g.CreatedBy,g.Input})
.Where(w=>w.Count() > 1)
Run Code Online (Sandbox Code Playgroud)
但这会返回所有列表而不是重复列表
更新以添加示例链接:
https://dotnetfiddle.net/HWMYp6
我在上面的链接中创建了这个例子.
在示例中,我想标记具有id 10的集合,其中输出(output5)作为副本,作为输入的组合,并且在id 1,2,3之前已经存在(所有这些都属于output1).因此,输入和createby的基本组合不应该在另一组上重复.参考键是输出.对不起,如果我的帖子不是很清楚.我试过了.
看来您只想按“创建者”和“输入”进行分组,在这种情况下,对当前查询进行轻微修改就足够了:
var result = uData.GroupBy(x => (x.Input, x.CreatedBy))
.Where(x => x.Count() > 1)
.SelectMany(x => x);
Run Code Online (Sandbox Code Playgroud)
我只是删除了该GroupBy字段Output。
GroupBy读作“按输入和创建者分组”Where读作“保留有两个或更多项目的组”SelectMany将嵌套序列折叠成IEnumerable<Data>更新:
根据您的编辑,您正在寻找:
var myList = uData.GroupBy(x => new {x.Input, x.CreatedBy})
.SelectMany(x => x.GroupBy(z => z.Output).Skip(1))
.SelectMany(x => x);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
513 次 |
| 最近记录: |