gpt4 book ai didi

c# - 在单个 LINQ 表达式中转换 if

转载 作者:太空宇宙 更新时间:2023-11-03 20:56:13 28 4
gpt4 key购买 nike

我正在努力将这段代码转换为单个 LINQ 表达式。

var x = values
.Where(v => v.Columns.Any(c => c.Code == code && c.Value == value))
.Select(v => v.Value)
.FirstOrDefault();

if (x == null)
{
x = values
.Where(v => v.Columns.All(c => string.IsNullOrEmpty(c.Code))
.Select(v => v.Value)
.FirstOrDefault();

}

基本上我有一个对象列表。每个对象都包含一个 Column 对象列表和一个 Value

我想过滤包含特定Column对象的对象(基于CodeValue),但是如果这个组合不存在,我想回退到包含 Column 对象列表的实体,所有对象的 Code 等于 string.Empty(通配符).

我尝试了如下不同的方法但没有成功:

var x = values
.Where(v => v.Columns.Any(c => c.Code == code && c.Value == value)
? v.Columns.Any(c => c.Code == code && c.Value == value)
: v => v.Columns.All(c => string.IsNullOrEmpty(c.Code))
.Select(v => v.Value)
.FirstOrDefault();

最佳答案

我建议 Concat 这两种选择:

var x = values
.Where(v => v.Columns.Any(c => c.Code == code && c.Value == value))
.Select(v => v.Value)
.Concat(values // second alternative if 1st returns empty cursor
.Where(v => v.Columns.All(c => string.IsNullOrEmpty(c.Code))
.Select(v => v.Value))
.FirstOrDefault();

编辑:您可以通过将.Select(v => v.Value) 提取到

来简化查询(参见CSharpie 的评论)
var x = values
.Where(v => v.Columns.Any(c => c.Code == code && c.Value == value))
.Concat(values // second alternative if 1st returns empty cursor
.Where(v => v.Columns.All(c => string.IsNullOrEmpty(c.Code)))
.Select(v => v.Value)
.FirstOrDefault();

关于c# - 在单个 LINQ 表达式中转换 if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50411152/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com