【问题标题】:LINQ with IN clause with exact matches [closed]带有完全匹配的 IN 子句的 LINQ [关闭]
【发布时间】:2020-01-07 10:04:40
【问题描述】:

我正在使用 LINQ 查询我的数据库,并且我的记录有一个状态(活动、非活动、保留、待定等)。当我使用非活动状态执行包含时,它也会返回活动状态,因为它确实包含该值。

我的 UI 允许用户检查他们想要返回的状态,我将这些状态作为数组传递给我的后端。我知道在 LINQ 中执行 IN 子句就像“where statuses.contains(t.Status)”。我的问题是,如果我传入 Inactive 它将匹配 active 因为它确实包含这个词。在 T-SQL 中,如果我有 WHERE 状态 IN ('Inactive'),它只会返回非活动的记录。有没有人做过类似 T-SQL IN 子句的事情?

【问题讨论】:

  • statuses 是什么?枚举列表?
  • 您还需要发布代码。目前还不是很清楚你在做什么。什么是状态?
  • ContainsIEnumerableString 上的一个方法,所以当你提到where statuses.contains(t.Status) 时不清楚你在使用什么
  • @Zoey 很可能创建了一个带有逗号分隔值的字符串"a,b,c"。当她应该使用 array 字符串 ["a", "b", "c"] 时。 stackoverflow.com/questions/44991481/… 可能值得一读。
  • 如果我没看错,问题是“非活动”包含“活动”。这意味着您正在检查一个字符串是否包含一个字符串,而不是检查一组字符串是否包含一个字符串。但无论哪种方式,如果没有一些代码,这是不可能回答的。

标签: c# string linq contains in-clause


【解决方案1】:

如果没有代码,很难准确说出您想要什么。

但这是我的猜测......

您正在执行.Contains("active") 并且返回的行也是Inactive 的状态?

如果是这样,你就不能这样做吗?

var active = rows.Where(r => { r.status == "active" });

如果这不正确,请您发布一些代码来帮助我们。

谢谢。

【讨论】:

    【解决方案2】:

    好的,所以我很尴尬地说我的问题是因为它使用的是带有逗号分隔值的字符串而不是字符串数组。一旦我切换到字符串数组,我的查询就会使用 IN 子句而不是 CHARINDEX。

    对于我的问题没有更具体,我深表歉意。 @mjwills 我注意到刷新后你有答案了。

    【讨论】:

      猜你喜欢
      • 2023-01-15
      • 1970-01-01
      • 2016-03-25
      • 2015-08-04
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多