ho le seguenti classi: 2Come applicare condizione WHERE per EF .include() quando si costruisce fino interrogazione 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; }
}
Ho poi ho una query EF che riporta 'tutti attivi' Rules
, e I necessario. Includere Exclusions
per ogni Rule
(se ce ne sono) MA solo per Exclusions
a cui è stato assegnato lo InstanceId
specificato. Pertanto, il filtro viene eseguito in base alla proprietà Exclusions
anziché filtrare Rules
.
Ho anche alcune condizioni durante la creazione della query EF che devo prendere in considerazione.
Ecco la mia domanda in questo momento:
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();
}
}
ho cercato di applicare un .Dove all'interno del .Include()
nel tentativo di includere solo il relativo Exclusions
(sulla base di instanceId
), ma scoperto non si può fare quella. Ho dato la caccia e ho trovato alcuni esempi in cui la gente aveva usato un tipo anonimo, ma non riuscivo a farlo funzionare quando ho costruito la query pezzo per pezzo come sto facendo qui.
Quindi, non so come riuscirò a realizzare questo dato che in realtà non voglio tornare 'ogni' Exclusion
per ogni Rule
, quando non ho bisogno di restituire ogni Exclusion
.
a volte è solo più facile da eseguire una corretta SQL. –
Hai risolto? –
@VinodKumar No, non ancora. Non credo che la soluzione di Vitaliy riportata sotto funzionerà in quanto non restituirà le regole "tutte", ne avrà filtrato alcune in base alle esclusioni. – marcusstarnes