我有以下两个类:
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查询来获取所有“活动的”规则
,并且我需要为每个规则
(如果有).Include 排除项
,但仅包括已分配指定实例ID
的排除项
。因此,过滤是针对排除项
属性进行的,而不是过滤掉规则
。
在构建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()
中应用.Where
,以仅包括相关的Exclusions
(基于instanceId
),但发现无法这样做。我找到了一些人使用匿名类型的示例,但是由于我正在逐步构建查询部分,因此无法使其正常工作。所以,我不知道如何实现这一点,因为我真的不想为每个
Rule
返回“每个”Exclusion
,当我不需要返回每个Exclusion
时。