Spracheの深い知識がなくても、問題のドメインを理解するために例を単純化しました。
この例では、の値の1つにのみ興味があるLinqPadを使用して、から複数のステートメントを取得します。ですから、この任意の例では、人々とケーキのすべての組み合わせを知りたいのですが、ケーキの名前だけに興味があります。
var people = new List<string> {
"Billy", "Jimmy"
};
var cake = new List<string> {
"Carrot Cake", "Chocolate Cake"
};
(from p in people
from c in cake
select new
{
c
}).Dump();
文からの複数のクロスになってしまうなど、ネストされたforeach文と考えることができます(ここではLINQ Join with Multiple From Clauses説明したように)参加
だから場合のは、これはSpracheの作者の意図であると仮定しましょう
people.SelectMany(p => cake, (p, c) => new { c }).Dump();
:それは私たちのようなもので終わる
SelectMany().
されて終わる:(https://codeblog.jonskeet.uk/2011/01/28/reimplementing-linq-to-objects-part-41-how-query-expressions-work/ここで説明したように)流暢な構文でこれを書き換えるしよう
あなたはまだ「人」のパラメタで終わります。
私は、Spracheの意図を維持するために、__ステートメントを持たない方法はないことをお勧めします。おそらく自分自身で表現木を構築しない限り、それは生産的であるとは想像できません。
var parser =
from key in Identifier
from _ in OptionalWhitespace
.Then(_ => PropertySetter)
.Then(_ => OptionalWhitespace)
from value in PropertyValue
select new
{
key,
value
};
しかし関係ない部分はすぐにお互いに従わない場合、それは一般的な場合に役立つことはありません。あなたが一度にすべての関係ない部分を破棄するThen
を使用することができ、この特定のケースで
私はあなたがどこかにテーブルを一緒にリンクするためにどこかに参加していると思いますか?あなたの例を少し拡大して、他のテーブルの使い方を見ることができますか? –
@Alex KeySmithこれはデータベースクエリではなく、Spracheライブラリを使用して構築されたパーサールールです。 –
申し訳ありませんが、私の用語「テーブル」の使用はおそらく意味をなさないでしょう。私はあなたの他の_collections_がどのように使用されているか分かりませんでした。私はProperyValueを取得しようとしていますが、これはIdentifierにネストされていますか?問題のドメインを理解するのに役立ちますので、少し例を広げてください。 –