q = q.Where(s =>
!matchingRecords.Contains(s.Id)
|| (s.SecId != null)
);
但匹配記錄可能為空或其中有 0 個專案,因為它是一個串列。所以,在這種情況下,它會在上面的代碼中失敗。我想僅在匹配記錄不為空并且有一些元素不為空時才檢查它是否包含。
一種方法是放置IF-Else塊并重復代碼,但我想行內,如何?
uj5u.com熱心網友回復:
q = q.Where(s => (matchingRecords != null && matchingRecords.Count > 0 &&
!matchingRecords.Contains(s.Id))
|| (s.SecId != null)
);
條件 matchingRecords != null && matchingRecords.Count > 0 將確保 !matchingRecords.Contains(s.Id) 只有在 matchingRecords 至少有 1 條記錄時才會執行
uj5u.com熱心網友回復:
所以,如果輸入條件是:
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與三元取代,后者將使用過濾器回收Where或退回new List<Record>的else情況。
樣本:
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; }
}
不確定是否正確重現了您的情況,如果有問題請糾正我。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/313312.html
上一篇:限制EF查詢以節省DTU
