時,我有以下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