簡體   English   中英

如何在“in”子句中使用Entity Framework中的參數?

[英]How to use parameters in Entity Framework in a “in” clause?

我正在使用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

我嘗試創建一個long列表並添加一些ID,但我得到其他錯誤。

如何在查詢中使用列表o ID作為參數?

我想使用參數,如果可能的話。

謝謝。

您的代碼存在一些問題。

首先,為了修復您的數據類型錯誤,您必須在執行任何其他操作之前將strIDs轉換為整數。 這應該工作

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

現在,既然你已經使用了實體框架,為什么不使用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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM