我有以下代码不起作用:
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是可空Long的类型:long?
我犯了一个奇怪的错误:
-> System.InvalidOperationException: LINQ表达式'DbSet .Where(s => __BooksIds_0 .Contains(b.SttmId.ToString())‘)无法翻译。要么用可以翻译的表单重写查询,要么通过插入对AsEnumerable()、AsAsyncEnumerable()、ToList()或ToListAsync()的调用,显式地切换到客户端计算。
我是做错了什么,还是EF核心有什么问题?
发布于 2021-02-02 19:48:05
这应该是可行的:
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();发布于 2021-02-02 20:06:31
我运行了类似的代码,但没有.Include(b => b.Writer) (认为这并不重要),而且它可以工作。这可能取决于数据库管理系统还是EntityFrameworkCore版本?我使用SQL server和EntityFrameworkCore 3.1.1
https://stackoverflow.com/questions/66016232
复制相似问题