ですから、二つの配列を持っています。レコードとルールの配列の配列:
IEnumerable<Record> records = ...
IEnumerable<Rule> rules = ...
あなたの目標のあなたのテキスト記述は、SQL文が示唆よりも少し異なっている:
与えられたルールの種類については、私は、反復処理したいですレコードのリストとルール条件が満たされた最初のレコードを検索します。私はこれをすべてのルールタイプに対して実行したい。
つまり、すべてのルールに対して、ルールに一致する最初のレコードのみが必要です。
あなたのSQLステートメントを使用すると、すべてのルールのための記録的な年で注文したルール、
あなたのテキストの要件を満たすすべてのレコードを望ん示唆しています。
すなわち IEnumerable<Record> result = Rules.Select(rule =>
records.Where(record => rule.Condition(record))
.FirstOrDefault();
:ルールのシーケンス内のすべてのルールから、rule.Condition(レコード)が真であるレコードの順序で最初の(またはデフォルト)の記録を取るこれはあなたのLINQのようになるために 。
これはあなたの目標の説明文に正確に従いますが、すべてのレコードについて知っているレコードの結果シーケンスから、そのレコードがルールに適合するルールがあります。レコードがその条件を満たす最初のルールであるかどうかはもう分かりません。
また、あなたの結果にルールを覚えて、この最初のレコードの試合を支配しているかを知りたい場合は、次の規則のコレクション内のすべてのルールから
var result = rules.Select(rule => new
{
Rule = rule,
FirstMatchingRecord = records
.Where(record =>rule.Condition(record))
.FirstOrDefault(),
});
は、ルールを選択して、コレクションの最初のレコードルールと一致するレコードを匿名オブジェクトのプロパティRuleおよびFirstMachingRecordに入れます。
最初に一致するレコードは、レコードコレクションの順番になります。
IEnumerable<Record> result = Rules.Select(rule =>
records.Where(record => rule.Condition(record))
.OrderBy(record => record.Year)
.FirstOrDefault();
レコードの数と一致するレコードの数に応じて、それは、レコード一次に賢明かもしれませんし、その後で注文した結果を使用する:あなたのSQLステートメントを使用すると、昇順年のレコードを注文したいことを示唆していますあなたの場所の文:
var orderedRecords = records.Orderby(record => record.Year);
IEnumerable<Record> result = Rules.Select(rule =>
orderedRecords.Where(record=> rule.Condition(record))
.FirstOrDefault();
あなたのSQL文あなたはすべてのためにとルールのグループが年順のレコードの順序を支配したいことを示唆しています。 LINQでは:ルールのコレクション内のすべてのルールについては
var result = rules.Select(rule => new
{
Rule = rule,
MatchingRecords = records
.Where(record => rule.Condition(record))
.OrderBy(record => record.Year),
});
、ルールを含む新しい匿名のオブジェクトと、昇順に年が注文したルールに一致するレコードの列を作ります。この結果から
「レコード」と「ルール」の関係は何ですか?あなたは例リストを提供できますか? – PoweredByOrange
サンプル情報とサンプル結果を表示することが理想的です。あなたはグループごとに最初の出現を望みますか? –