【问题标题】:EF Core FromSql with IN Clause带有 IN 子句的 EF Core FromSql
【发布时间】:2020-02-15 12:48:03
【问题描述】:

如何将 int 的动态列表传递给 FromSql 方法? 我尝试了以下代码,但它不起作用。

将 nvarchar 值 '1,2,3' 转换为数据类型 int 时转换失败。

var result = dataContext.Customers.FromSql($"SELECT * FROM Customer WHERE Id IN ({string.Join(",", listOfInt)})")

【问题讨论】:

  • 它不起作用是什么意思?错误信息?
  • @Steve Conversion 在将 nvarchar 值 '1,2,3' 转换为数据类型 int 时失败。
  • 尝试使用 FromSqlInterpolated docs.microsoft.com/en-us/ef/core/querying/raw-sql
  • FromSql 似乎对您的字符串进行了一些更改。我会尝试使用 sql 文本准备一个变量并传递该变量以查看此更改是否也以这种方式发生
  • @Barns 我真正的查询比这要重得多。我只是简化了它以使其更易于阅读和回答

标签: c# entity-framework entity-framework-core .net-core-3.0 ef-core-2.2


【解决方案1】:

你可以试试这个方法

var Ids = string.Join(',', listOfInt.Select(n => n.ToString()).ToArray());

var result = dataContext.Customers.FromSql($"SELECT * FROM Customer WHERE Id IN ({Ids})")

【讨论】:

  • Id 值类型是什么?
  • 这个查询怎么样? var result = dataContext.Customers.FromSql("SELECT * FROM Customer WHERE Id IN (" + string.Join(",", listOfInt) + ")");
【解决方案2】:

这对我有用:

var result = dataContext.Customers.FromSql(string.Format("SELECT * FROM Customer WHERE Id IN ({0})", string.Join(",", listOfInt)));

它确实抱怨注入漏洞,但至少很容易清理 int 列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 2020-06-08
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 2012-11-30
    • 2021-01-11
    相关资源
    最近更新 更多