林克.当相等匹配时,包含不匹配

  • 本文关键字:包含 不匹配 林克 c# linq
  • 更新时间 :
  • 英文 :


以下代码没有得到任何结果

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));

最新更新