Linq remove where如果值为null

7kjnsjlb  于 2024-01-03  发布在  其他
关注(0)|答案(5)|浏览(216)

我的Linq查询

  1. var result = db.APPLICATIONS
  2. .Where(a => Statuses.Contains(a.STATUS_ID))
  3. .Where(a => a.TrackingNo == TrackingNo)

字符串
Statuses是一个int列表,TrackingNo是一个可空的int(int?)。

**问题:**如果TrackingNo为null,那么我不想运行此子句或跳过此条件。

iyr7buue

iyr7buue1#

LINQ查询可以通过多个步骤构建:

  1. var result = db.APPLICATIONS
  2. .Where(a => Statuses.Contains(a.STATUS_ID));
  3. if (TrackingNo != null)
  4. {
  5. result = result.Where(a => a.TrackingNo == TrackingNo);
  6. }

字符串
注意,如果你有一个Select(一个投影),你可能必须在多个变量中的多个步骤中构建查询:

  1. var result2 = result.Select(a => new { a.STATUS_ID });


result2是在if之后“构建”的。

展开查看全部
vc9ivgsu

vc9ivgsu2#

你可以使用它的“HasValue”属性来检查一个可空的int。

  1. var result = db.APPLICATIONS
  2. .Where(a => Statuses.Contains(a.STATUS_ID))
  3. .Where(a => a.HasValue && (a.TrackingNo == TrackingNo))

字符串
这将导致它在检查值本身之前评估“HasValue”。如果HasValue返回false,那么它将永远不会评估表达式的其余部分(因此不会导致NullReferenceException)。如果它是“int?"类型,那么这将起作用。

hwamh0ep

hwamh0ep3#

只需添加&&条件并检查null。您可以在这里使用1 where条件,为什么第二个where。请尝试以下操作:

  1. var result = db.APPLICATIONS
  2. .Where(a => Statuses.Contains(a.STATUS_ID)
  3. && a.TrackingNo!=null
  4. && a.TrackingNo == TrackingNo)

字符串

cgvd09ve

cgvd09ve4#

在尝试向store表达式添加更多内容之前,您应该首先检查筛选参数的值。如果可空的TrackingNo具有值,则仅应用Statuses和TrackingNo筛选。否则,它将返回所有APPLICATIONS作为IQueryable。

  1. var result = db.APPLICATIONS.AsQueryable();
  2. if (TrackingNo.HasValue)
  3. {
  4. result = result.Where(a => Statuses.Contains(a.STATUS_ID) && a.TrackingNo == TrackingNo);
  5. }
  6. return result;

字符串
或者,这将检查您是否有任何状态应用和跟踪分开。

  1. var result = db.APPLICATIONS.AsQueryable();
  2. if (Statuses != null && Statuses.Count() > 0)
  3. {
  4. result = result.Where(a => Statuses.Contains(a.STATUS_ID));
  5. }
  6. if (TrackingNo.HasValue)
  7. {
  8. result = result.Where(a => a.TrackingNo == TrackingNo);
  9. }
  10. return result;


或者第三种选择,因为不清楚你真正想要的是什么。这将始终应用状态过滤,只有在状态可用时才进行跟踪

  1. var result = db.APPLICATIONS.Where(a => Statuses.Contains(a.STATUS_ID));
  2. if (TrackingNo.HasValue)
  3. {
  4. result = result.Where(a => a.TrackingNo == TrackingNo);
  5. }
  6. return result;

展开查看全部
svgewumm

svgewumm5#

我认为你可以让它返回所有值,如果值为null,就像这样:

  1. .Where(q => id != null ? q.Id == id : true)

字符串

相关问题