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的代码不工作的地方吗?