Je suis nouveau sur LINQ, aidez-moi à convertir cette ligne de codes imbriqués en LINQ.

foreach(var rule in rules)
{
    foreach(var package in packages)
    {
        if(rule.KeyFrom == package.Key || rule.KeyTo == package.Key)
        {
            filteredRule.Add(new RuleModel{Package = new List<string>{rule.KeyTo, rule.KeyFrom}, Rule = rule.Rule});
        }
    }
}

Tentative de requête:

rules.SelectMany(r => packages.Select(p => p.Key == r.KeyFrom || p.Key == r.KeyTo))
     .Select(new RuleModel {
          Package = new List<string>{ r.Keyfrom, r.KeyTo}, 
          Rule = r.Rule 
     }));
0
siddharth 14 août 2017 à 10:10

2 réponses

Vous devez utiliser SelectMany.

Le code sera comme ceci:

var ruleModels = rules.SelectMany(r => r.packages).Where(rule.KeyFrom == package.Key || rule.KeyTo == package.Key).Select(r => new RuleModel{Package = new List<string>{r.KeyTo, r.KeyFrom}, Rule = r.Rule});

filteredRule.AddRange(ruleModels);
2
Ygalbel 14 août 2017 à 07:23

Vous pouvez essayer le code ci-dessous:

    filteredRule.AddRange(rules.Where(b =>
 packages.Any(a => b.KeyFrom == a.Key || b.KeyTo == a.Key)).select(
p=>new new RuleModel { Package = new List<string> 
{ p.KeyTo, p.KeyFrom }, Rule = p.Rule }));
0
Rahul Gupta 14 août 2017 à 08:55