gpt4 book ai didi

c# - 如何在 "in"子句中使用 Entity Framework 中的参数?

转载 作者:太空狗 更新时间:2023-10-29 22:32:59 24 4
gpt4 key购买 nike

我正在使用 Entity Framework 4.0,我想使用以下查询:

为此,我执行以下操作:

strSQLQuery = "select * from MyTable where IDData IN (@IDs)";
lstParameters.Clear();
myParameter = new SqlParameter("@IDs", strIDs);
lstParameters.Add(myParameter);

myContext.MyTable.SqlQuery(strSQLQuery, lstParameters.ToArray<object>()).ToList<MyTable>();

但我得到一个异常,表明无法将 nvarchar 转换为 bigint

因为参数是字符串类型,表中的ID是bigint

我尝试创建一个长列表并添加一些 ID,但出现其他错误。

如何使用 ID 列表作为查询中的参数?

如果可能的话,我想使用参数。

谢谢。

最佳答案

您的代码存在一些问题。

首先,要修复数据类型错误,您必须先将 strIDs 转换为整数,然后再执行任何其他操作。这应该有效

var ids = strIDs.Select(s => long.Parse(s));

既然您已经在使用 Entity Framework ,为什么不使用 Linq 而不是创建 SQL 查询呢?

var results =
from r in myContext.MyTable
where ids.Contains(r.IDData)
select r;

或者用流利的语法

var results = myContext.MyTable.Where(r => strIDs.Contains(r.IDData));

但是如果你真的想使用 SQL,IN 运算符不支持那样的参数。你必须这样写:

strSQLQuery = "select * from MyTable where IDData IN(@ID1, @ID2, @ID3, ...)";

因此,要轻松完成此操作,您可以像这样从 ids 生成查询:

strSQLQuery = "select * from MyTable where IDData IN(" + String.Join(", ", ids.Select((s, i) => "@ID" + i)) + ")";
foreach(var parameter in ids.Select((s, i) => new SqlParameter("@ID" + i, s)))
{
lstParametros.Add(parameter);
}

关于c# - 如何在 "in"子句中使用 Entity Framework 中的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16085812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com