2つの入力セットAおよびBから派生したドメインからブール関数のリストにルールを適用するlinqクエリを作成しようとしています。LINQ to Objectsクエリを「中断する」ことは可能ですか?
しかし、だから私はAの各要素について最大でも1つの結果しか得られない。
これは味付けした機能的な人々には意味があると思う - 私の感覚は、物事の仕方その世界は、私は実際に正しい軌道にいるかどうかは分かりません...
ここにコードは、うまくいけば私がやっていることは明らかです:
その結果List<int> a = new List<int>();
a.Add(1);
a.Add(2);
List<int> b = new List<int>();
b.Add(1);
b.Add(2);
Func<int, int, string> map = (i, j) => i + "->" + j;
var rules = new List<Func<int,int,Tuple<bool, Func<int, int, string>>>>();
rules.Add((i, j) => new Tuple<bool, Func<int,int,string>>(i == j, (ii, jj) => map(ii, jj)));
rules.Add((i, j) => new Tuple<bool, Func<int,int,string>>(i+j == 2, (ii,jj) => map(ii,jj)));
var q = from ai in a
from bi in b
from rule in rules
let tuple = rule(ai, bi)
where tuple.Item1 == true
select tuple.Item2(ai, bi);
:
1->1
1->1
2->2
望ましい結果:私は最初のルール1-> 1と一致した場合に発生される持っているようをいただきたい何
1->1
2->2
、私ができます2番目の1-> 1を除外します。それは、私が基本ルールとフォールバックルールを順番に適用することができるようになりますが、余分なマッピングを生成しないようです。
ありがとう:
がになります。各ルールを一意にそのルールの表現によって識別されますので、あなたは単に意味、出力に明確なを実行することができますとてもかっこいい。何らかの理由で私はTakeWhileについて知りませんでした。 – aevanko