LINQ式を記述する際に問題が発生しています。 以下のリスト(パッケージとルール)からルールをフィルタリングしたいが、結果が正しくない。 下記の期待結果の式を書き直してください。LINQの式が正しくありません
public class Package
{
public int Id {get;set;}
public string PackageKey {get;set;}
}
public class Rule
{
public string Key1 {get;set;}
public string Key2 {get;set;}
}
public Class RuleEntity
{
public List<string> Keys {get;set;}
}
var rules = new List<Rule>
{
new Rule
{
Key1 = "001",
Key2 = "002",
},
new Rule
{
Key1 = "001",
Key2 = "003",
},
new Rule
{
Key1 = "004",
Key2 = "005",
},
new Rule
{
Key1 = "006",
Key2 = "008",
}
};
var packages = new List<Package>
{
new Package
{
Id = 1,
PackageKey = 001
},
new Package
{
Id = 1,
PackageKey = 002
}
};
var filteredRules = new List<RuleEntity>();
filteredRules.AddRange(packages.SelectMany(p => rules.Where(r => p.PackageKey.Equals(r.Key1) || p.PackageKey.Equals(r.Key2))
.Select(r => new RuleEntity{ Keys = new List<string>{r.Key1, r.Key2}})
));
//Result from above expression is this.
filteredRules
{
Keys{ "001", "002" },
Keys{ "001", "003" }
}
//Result Expected is :
filteredRules
{
Keys{ "001", "002" }
}
FilteredRulesには、キーがパッケージリストにあるルールのみが含まれている必要があります。パッケージリストにパッケージが1つしかない場合は、filteredRulesにルールは存在しません。
に縮小されたルックアップ迅速に行うことが先行キーのHashSetのを持っている方が良いだろう両方のキーはパッケージリストにありますか? – LiverpoolOwen
ルールがパッケージ権利と同じ 'Key1'と' Key2'を持っていれば、あなたはまだ1つのパッケージに対して結果を得るでしょうか?それが決して起こらない限り。 – juharr