我正在使用.Net 6和EF Core 6。假设我有一个包含字符串属性的实体,并且我有一个字符串变量的动态列表,我想使用LINQ找出我的表特定列的哪些记录包含至少一个这些单词。
我的实体是:
Public class Sample
{
public int Id { get; set; }
public string Caption { get; set; }
}
字符串单词列表为:
List<string> words;
我使用下面的代码来得到结果:
var query = _sampleRepository.AsQueryable().AsNoTracking(); // the type is IQueryable<Sample>
query = query.Where(x => words.Any(word => x.Caption.Contains(word)));
query = query.OrderByDescending(x => x.Id).Skip(50).Take(20);
query = query.ToList();
但在执行上述代码时,我会得到一个 Exception,表示以下代码的一部分:
查询。其中(x =〉单词。任何(单词=〉x.标题。包含(单词)))无法被EF转换为这样的查询以从数据库获取数据!
我实际上想要,我应该使用LINQ来做这件事,它不可能使用,例如connection.QuerySingleOrDefaultAsync
方法或其他。
请帮帮我!
2条答案
按热度按时间2ic8powd1#
由于EF无法转换放在“where”中的“any”中的嵌套“contains”,因此需要使用 predicate 并将其传递给where子句
sh7euo9m2#
我终于找到了解决办法!
我应该使用**
LinqKit
的金块包**来帮助我做到这一点!这是解决方案代码:
我需要LinqKit来使用PredicateBuilder,上面的代码应该替换为
query = query.Where(x => words.Any(word => x.Caption.Contains(word)));
,它对我很有效!