C# .Contains()in.Where()EF Core不';t工作.NET核心3.1.8
我有以下不起作用的代码:C# .Contains()in.Where()EF Core不';t工作.NET核心3.1.8,c#,asp.net-core,.net-core,entity-framework-core,C#,Asp.net Core,.net Core,Entity Framework Core,我有以下不起作用的代码: var bookIds = source.Sids.Split(","); var hkm = _context.Books .Include(b => b.Writer) .Where(b => bookIds.Contains(b.SttmId.toString())) .ToList(); 要进一步澄
var bookIds = source.Sids.Split(",");
var hkm = _context.Books
.Include(b => b.Writer)
.Where(b => bookIds.Contains(b.SttmId.toString()))
.ToList();
要进一步澄清上述代码,请执行以下操作:
// kinda same like the code above (just to clarify what source is):
// This doesn't work
var bookIds = "2194".Split(",");
var hkm = _context.Books
.Include(b => b.Writer)
.Where(b => bookIds.Contains(b.SttmId.toString()))
.ToList();
// This works
var bookIds = 2194;
var hkm = _context.Books
.Include(b => b.Writer)
.Where(b => b.SttmId == bookIds))
.ToList();
b.SttmId
属于可为null的Long类型:Long?
我得到一个奇怪的错误:
--->System.InvalidOperationException:LINQ表达式
“DbSet
.其中(s=>\u\u BooksIds\u 0
.Contains(b.SttmId.ToString())”无法翻译。以可翻译的形式重写查询,或切换
通过插入对
AsEnumerable()、AsAsAsyncEnumerable()、ToList()或ToListSync()
我是做错了什么还是EF Core有什么问题?这应该可以:
var bookIds = new long[] { 2194 };
var hkm = _context.Books
.Include(b => b.Writer)
.Where(b => bookIds.Any(x => x == b.SttmId))
.ToArray();
如果是这样的话,你所要做的就是安排一系列的多头
var bookIds = "1 2 3 4".Split().Select(x => long.Parse(x)).ToArray();
我运行了类似的代码,但没有
。Include(b=>b.Writer)
(认为这无关紧要)并且它可以工作。
这可能取决于数据库管理系统或EntityFrameworkCore版本?我使用SQL server和EntityFrameworkCore 3.1.1我也尝试了:
Convert.ToString(b.SttmId)
这也不起作用。b.SttmId是什么类型的?您是否尝试过将数组设置为与db属性相同的类型?您好@CaiusJard在问题中我提到过它的类型是long?
:)对不起,我认为您的编辑与我的注释交叉-没有看到您将其作为long@OS您正在使用的数据库是什么?SQL Server、MySQL、Oracle?我会试试看。我使用的EntityFrameworkCore 3.1.8
即使删除了Include()
,仍然会出现相同的错误。我可能会尝试升级我的.NET Core和entityframework软件包。@OS我认为它与你的.NET/EF版本无关。我用EF Core 3.1运行了你的代码,它运行正常。@atiyar它确实与.NET/EF版本无关。为什么.Where(b=>bookIds.Contains(b.SttmId))
不工作?你是说它不工作吗?这不是OP的代码不工作的地方吗?