Я искал эту проблему, но я думаю, что кто-то столкнулся с ней. Я пытаюсь использовать операцию IN с ExecuteQuery.C# ExecuteQuery: Как использовать оператор IN?
IEnumerable<TAssets> results = db.ExecuteQuery<TAssets>
("SELECT * FROM TAssets " +
" WHERE AssetId not in (select MatchedAssetId from TMatches where LabelId = {0})" +
" and CompanyId in ({1}) ",
labelid,
string.Join(",", companyIdList)
);
return results.ToList();
Проблема заключается в string.join ("", companyIdList) возвращается '61, 70' . Затем он пытается преобразовать его в целое. Зачем? Что я должен делать?
ERROR:Conversion failed when converting the nvarchar value '61,70' to data type int.
System.Data.SqlClient.SqlException (0x80131904): Conversion failed when converting the nvarchar value '61,70' to data type int.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlDataReader.TryHasMoreRows(Boolean& moreRows)
at System.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more)
at System.Data.SqlClient.SqlDataReader.Read()
at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReaderBase`1.Read()
at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
Любые предложения? Или вы можете показать мне использование оператора IN с помощью ExecuteQuery?
я может отсутствовать что-то очевидное, но то, что ваш 'db' объект в этом случае, и то, что' ExecuteQuery'-метод вы используете? Это не часть 'SqlCommand' или' DbContext'. – smoksnes
Как и большинство языков, SQL интерпретирует строку * single *, которая имеет значение *, содержит * цифры и запятые, а не * несколько * параметров. –
@smoksnes db - System.Data.Linq.DataContext. Возможно, я ошибаюсь, используя функцию ExecuteQuery. – akdora