以下代码没有得到任何结果
var transit = _receiptRepository
.AcceptanceDetails
.Where(w => (w.Acceptance.PartyId == partyId || partyId == 0) &&
new[] { 3, 4, 5 }.Contains(w.Acceptance.StatusCode));
但是使用相等运算符代替CCD_ 1匹配作为预期
var transit = _receiptRepository
.AcceptanceDetails
.Where(w => (w.Acceptance.PartyId == partyId || partyId == 0) &&
new[] { 3, 4, 5 }.Any(x => x == w.Acceptance.StatusCode));
有人能解释一下为什么这些不等价吗?
状态代码的定义
public int StatusCode { get; set; }
和来自存储库代码
public IEnumerable<AcceptanceDetail> AcceptanceDetails =>
_appDbContext.AcceptanceDetail.Where(w => w.Closed == null)
.Include(i => i.Acceptance);
您需要记住,表达式树是经过解释的,与编译没有相同的行为。我认为表达式树没有正确翻译您的数组。您应该先将其提取到一个变量中。
var statuses = new int[] { 3, 4, 5 };
var transit = _receiptRepository
.AcceptanceDetails
.Where(w => (w.Acceptance.PartyId == partyId || partyId == 0) &&
statuses .Contains(w.Acceptance.StatusCode));