【问题标题】:Using Linq, how do I query for records matching a comma-separated list of IDs?使用 Linq,如何查询与逗号分隔的 ID 列表匹配的记录?
【发布时间】:2012-08-09 19:52:06
【问题描述】:

我有一个从查询字符串中获得的记录 ID 的逗号分隔列表。我需要使用这些 ID 返回所有记录(来自 SQL Server 数据库)。在 Linq 中最好的方法是什么?

我认为它最终将被转换为“WHERE id IN (1,2,3,...)”形式的 SQL 语句,并且由于该查询包含与我相同的逗号分隔列表首先,将它解压缩到一个 int 数组中,然后让 Linq 再次将其转换回来,这似乎是一种耻辱。但如果这是唯一的方法,那就没问题了。

【问题讨论】:

  • 无论如何最好将其转换为数组,以避免 SQL 注入

标签: c# linq-to-sql


【解决方案1】:

正如您所暗示的,首先将其转换为数组是最简单的。

string csv = "1,2,3";
IEnumerable<int> ids = csv.Split(',').Select( str => int.Parse(str));

var records = db.Records.Where( rec => ids.Contains(rec.id) );

【讨论】:

    【解决方案2】:

    使用 Dynamic Linq 避免不必要的转换

    .Where("MyColumn.Contains(@0)", myArray)
    

    Dynamic Linq - String.Split

    How to use "contains" or "like" in a dynamic linq query?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多