如何避免使用 IF-Else 并在 .where() 函数内使用内联 if 条件?
How to avoid using IF-Else and use inline if condition inside the .where() function?
q = q.Where(s =>
!matchingRecords.Contains(s.Id)
|| (s.SecId != null)
);
但 matchingrecords 可能为空或其中有 0 个项目,因为它是一个列表。所以,在那种情况下,上面的代码会失败。我只想检查这是否包含
匹配的记录不为空并且有一些元素不为空。
一种方法是放置 IF-Else
块并重复代码,但我想内联执行,如何?
所以,如果输入条件是:
matchingRecords
不为空;
matchingRecords
非空(包含元素,.Count > 0
);
- 不允许
if-else
使用;
可以通过ternary
完成吗?
var list = matchingRecords?.Count > 0 ?
q.Where(s => !matchingRecords.Contains(s.Id) && s.SecId != null).ToList()
: new List<Record>();
matchingRecords?
检查是否为空,.Count
检查是否为“非空”。 If-else
替换为三元,这将在 else
情况下使用 Where
或 return new List<Record>
过滤集合。
样本:
class Program
{
private static List<int> matchingRecords; // It is null, we "forget" to initialize it
static void Main(string[] args)
{
var list = new List<Record>()
{
new Record { Id = 0, SecId ="Some SeqId" },
new Record { Id = 1, SecId = null },
new Record { Id = 2, SecId = "Another SeqId" },
};
var filteredRecords = FilterRecords(list);
}
static IEnumerable<Record> FilterRecords(IEnumerable<Record> q)
{
return matchingRecords?.Count > 0 ? // Checking for not null and not empty (if case)
q.Where(s => !matchingRecords.Contains(s.Id) && s.SecId != null)
: q; // else case
}
}
public class Record
{
public int Id { get; set; }
public string SecId { get; set; }
}
不确定是否正确重现了您的情况,如有错误请指正。
q = q.Where(s => (matchingRecords != null && matchingRecords.Count > 0 &&
!matchingRecords.Contains(s.Id))
|| (s.SecId != null)
);
The condition matchingRecords != null && matchingRecords.Count > 0 will ensure !matchingRecords.Contains(s.Id) is executed only if matchingRecords has at least 1 record
q = q.Where(s =>
!matchingRecords.Contains(s.Id)
|| (s.SecId != null)
);
但 matchingrecords 可能为空或其中有 0 个项目,因为它是一个列表。所以,在那种情况下,上面的代码会失败。我只想检查这是否包含 匹配的记录不为空并且有一些元素不为空。
一种方法是放置 IF-Else
块并重复代码,但我想内联执行,如何?
所以,如果输入条件是:
matchingRecords
不为空;matchingRecords
非空(包含元素,.Count > 0
);- 不允许
if-else
使用;
可以通过ternary
完成吗?
var list = matchingRecords?.Count > 0 ?
q.Where(s => !matchingRecords.Contains(s.Id) && s.SecId != null).ToList()
: new List<Record>();
matchingRecords?
检查是否为空,.Count
检查是否为“非空”。 If-else
替换为三元,这将在 else
情况下使用 Where
或 return new List<Record>
过滤集合。
样本:
class Program
{
private static List<int> matchingRecords; // It is null, we "forget" to initialize it
static void Main(string[] args)
{
var list = new List<Record>()
{
new Record { Id = 0, SecId ="Some SeqId" },
new Record { Id = 1, SecId = null },
new Record { Id = 2, SecId = "Another SeqId" },
};
var filteredRecords = FilterRecords(list);
}
static IEnumerable<Record> FilterRecords(IEnumerable<Record> q)
{
return matchingRecords?.Count > 0 ? // Checking for not null and not empty (if case)
q.Where(s => !matchingRecords.Contains(s.Id) && s.SecId != null)
: q; // else case
}
}
public class Record
{
public int Id { get; set; }
public string SecId { get; set; }
}
不确定是否正确重现了您的情况,如有错误请指正。
q = q.Where(s => (matchingRecords != null && matchingRecords.Count > 0 &&
!matchingRecords.Contains(s.Id))
|| (s.SecId != null)
);
The condition matchingRecords != null && matchingRecords.Count > 0 will ensure !matchingRecords.Contains(s.Id) is executed only if matchingRecords has at least 1 record