时,我有以下2类:如何申请WHERE条件EF .INCLUDE()建立EF查询
public class Rule
{
public int Id { get; set; }
public string RuleValue { get; set; }
public bool IsActive { get; set; }
public SharedRuleType RuleType { get; set; }
public List<Exclusion> Exclusions { get; set; }
}
public class Exclusion
{
public int Id { get; set; }
public int InstanceId { get; set; }
public int SiteId { get; set; }
[ForeignKey("RuleId")]
public int RuleId { get; set; }
public Rule Rule { get; set; }
}
然后我有一个EF查询带回“所有活动” Rules
,和我需要它。包括Exclusions
为每个Rule
(如果有的话)但只有Exclusions
已被分配了指定的InstanceId
。因此,正在对Exclusions
属性进行筛选,而不是筛选出Rules
。
我也有一些条件,因为我建立我需要考虑的EF查询。
这是我的时刻查询:
public async Task<List<Rule>> GetRules(int instanceId, SharedRuleType ruleType, string searchTerm)
{
using (var context = new MyDbContext())
{
var query = context.Set<Rule>()
.Include(r => r.Exclusions) // *** Currently returns ALL exclusions but I only want ones where InstanceId == instanceId(param) ***
.Where(r => r.IsActive);
if (!string.IsNullOrEmpty(searchTerm))
{
query = query.Where(r => r.RuleValue.Contains(searchTerm));
}
if (ruleType != SharedRuleType.None)
{
query = query.Where(r => r.RuleType == ruleType);
}
return await query.ToListAsync();
}
}
我试过,试图在.Include()
内应用。哪里,只包括相关Exclusions
(基于instanceId
),但发现你不能做那。我在周围寻找并发现了一些人们使用匿名类型的例子,但是当我在这里做的时候,我无法在逐个构建查询时得到这个工作。
所以,我不知道我该如何实现这一点,因为我真的不希望每个都返回'every'Exclusion
,当我不需要每个Exclusion
都返回时。
有时,它只是更容易执行正确的SQL。 –
你解决了吗? –
@VinodKumar不,还没有。我不认为下面的Vitaliy的解决方案会起作用,因为它不会返回“全部”规则,它会根据排除规则筛选出一些。 – marcusstarnes