首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.Contains() in .Where() EF Core不工作.NET Core 3.1.8

.Contains() in .Where() EF Core不工作.NET Core 3.1.8
EN

Stack Overflow用户
提问于 2021-02-02 19:18:33
回答 2查看 2.8K关注 0票数 1

我有以下代码不起作用:

代码语言:javascript
复制
var bookIds = source.Sids.Split(",");            
     
var hkm = _context.Books
                .Include(b => b.Writer)
                .Where(b => bookIds.Contains(b.SttmId.toString()))
                .ToList();

为了更清楚地说明上面的代码:

代码语言:javascript
复制
// 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核心有什么问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-02 19:48:05

这应该是可行的:

代码语言:javascript
复制
var bookIds = new long[] { 2194 };

var hkm = _context.Books
                  .Include(b => b.Writer)
                  .Where(b => bookIds.Any(x => x == b.SttmId))
                  .ToArray();

如果是这样的话,你所要做的就是安排一个多头数组,例如

代码语言:javascript
复制
var bookIds = "1 2 3 4".Split().Select(x => long.Parse(x)).ToArray();
票数 2
EN

Stack Overflow用户

发布于 2021-02-02 20:06:31

我运行了类似的代码,但没有.Include(b => b.Writer) (认为这并不重要),而且它可以工作。这可能取决于数据库管理系统还是EntityFrameworkCore版本?我使用SQL server和EntityFrameworkCore 3.1.1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66016232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档