c# - 具有特殊值条件的分组导致Linq c#
问题描述
我需要在Group by
使用键 prop0、prop1时过滤值结果
我所做的是尝试在select
何时添加条件Group by
但不使用错误,如下所示:
Cannot implicitly convert type 'bool' to 'int'
Cannot implicitly convert type 'bool' to 'string'
这是我的代码
public class MyClass
{
public string prop0 { get; set; }
public int prop1 { get; set; }
public string prop2 { get; set; }
public int prop3 { get; set; }
}
static void Main(string[] args)
{
var list1 = new List<MyClass>();
list1.Add(new MyClass() { prop0 = "001", prop1 = 1, prop2 = "AAA", prop3 = 100 });
list1.Add(new MyClass() { prop0 = "001", prop1 = 2, prop2 = "BBB", prop3 = 200 });
list1.Add(new MyClass() { prop0 = "002", prop1 = 1, prop2 = "CCC", prop3 = 300 });
list1.Add(new MyClass() { prop0 = "002", prop1 = 1, prop2 = "XXX", prop3 = 400 });
list1.Add(new MyClass() { prop0 = "003", prop1 = 1, prop2 = "DDD", prop3 = 500 });
list1.Add(new MyClass() { prop0 = "004", prop1 = 1, prop2 = "XXX", prop3 = 600 });
list1.Add(new MyClass() { prop0 = "004", prop1 = 1, prop2 = "EEE", prop3 = 700 });
var tmpList = (from p in list1
group p by new
{
p.prop0,
p.prop1
} into data
select new MyClass()
{
prop0 = data.Key.prop0,
prop1 = data.Key.prop1,
prop2 = data.Select(p => p.prop2 == "XXX").First(),
prop3 = data.Select(p => p.prop2 == "XXX").First(),
}).ToArray();
Console.WriteLine();
}
原始清单
{ prop0 = "001", prop1 = 1, prop2 = "AAA", prop3 = 100 },
{ prop0 = "001", prop1 = 2, prop2 = "BBB", prop3 = 200 },
{ prop0 = "002", prop1 = 1, prop2 = "CCC", prop3 = 300 },
{ prop0 = "002", prop1 = 1, prop2 = "XXX", prop3 = 400 },
{ prop0 = "003", prop1 = 1, prop2 = "DDD", prop3 = 500 },
{ prop0 = "004", prop1 = 1, prop2 = "XXX", prop3 = 600 },
{ prop0 = "004", prop1 = 1, prop2 = "EEE", prop3 = 700 }
=> 我想要的结果
{ prop0 = "001", prop1 = 1, prop2 = "AAA", prop3 = 100 },
{ prop0 = "001", prop1 = 2, prop2 = "BBB", prop3 = 200 },
{ prop0 = "002", prop1 = 1, prop2 = "XXX", prop3 = 400 },
{ prop0 = "003", prop1 = 1, prop2 = "DDD", prop3 = 500 },
{ prop0 = "004", prop1 = 1, prop2 = "XXX", prop3 = 600 }
解决方案
只需检查具有“XXX”值的第一个对象,如果未找到则获取第一个值
var tmpList = (from p in list1
group p by new
{
p.prop0,
p.prop1
} into data
select new MyClass()
{
prop0 = data.Key.prop0,
prop1 = data.Key.prop1,
prop2 = (data.Select(x => x.prop2).FirstOrDefault(p => p == "XXX") ?? data.Select(x => x.prop2).First())
}).ToArray();
推荐阅读
- nginx - Nginx 子域服务器块不断重定向到 Centos 7 中的主域
- r - RMarkdown:将代码包装成块,但在管道后保持中断
- angular - 如何在不更改页面的情况下触发路由器守卫
- javascript - 如何在选中时设置值 true,在未选中时设置 false
- c++ - 在额外线程中运行 QML 方法
- c++ - c ++从开始迭代器到结束迭代器并执行操作
- powershell - 执行移动项目时如何附加文件名
- python-3.x - 如何迭代列表,以获得所有下一个值的组合
- amazon-web-services - ECS Fargate 上的 PGAdmin4
- python - 创建数独求解器和棋盘无法正确打印