这看起来真的很简单,但我似乎无法解决它。使用 EF Core,DbSet<Rule> Rules我的DbContext.
public class Rule
{
public int Id { get; set; }
public string Raw { get; set; }
}
我正在尝试编写一个查询,其中,给定一个IEnumerable<string> lines,Rule从DbSet它的Raw值是其中一个元素的位置lines(完全匹配,而不是值的子字符串)中给我所有的s 。
有一段时间,我使用了类似的东西:
private IQueryable<Rule> GetExistingRules() =>
dbContext.Rules.Where(r => lines.Contains(r.Raw));
但是,此后我发现(我认为)这并没有达到我的预期。(此方法紧随其后的Rule是为lines当前不存在的所有元素插入 new s 。我得到了Rule具有相同Raw值的重复s ...)我认为,相反,我需要使用.Intersect()?
我尝试根据this使用自定义 EqualityComparer ,但它引发了异常。
private IQueryable<Rule> GetExistingRules()
{
var lineRules = lines.Select(l => new Rule {Raw = l});
return dbContext.Rules.Intersect(lineRules, new RuleRawEqualityComparer());
}
private class RuleRawEqualityComparer : IEqualityComparer<Rule>
{
public bool Equals(Rule x, Rule y) => x?.Raw == y?.Raw;
...
}
无法解析表达式 'value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[FilterLists.Data.Entities.Rule]).Intersect(__p_0, __p_1)':方法 'System.Linq.Queryable.Intersect 的重载' 目前不支持。
编写此查询的最佳方法是什么?请注意,它处于DbContext交互链中,因此我更愿意将返回类型保留为 anIQueryable以启用 EF 的延迟查询组合。
拉风的咖菲猫
慕侠2389804
相关分类