私はあなたにそれを理解するための最善の試みを行い、私が間違っている場所を教えてくれます。簡単にするために私はLINQの理解に助けが必要です。私の理解はどこが間違っていますか?
、我々は唯一の
- 番号
1
、2
、3
、4
、5
- オペレータ
%
、彼らの通常のprecdenceと>
私がしたときに何が起こるか分かりたい
List<int> All = new List<int> { 1, 2, 3, 4, 5 };
IEnumerable<int> Filtered = from i in All
where i % 2 == 1
orderby i descending
select i;
foreach (var i in Filtererd)
{
Console.WriteLine(i);
}
私が最初に理解するのは、クエリ自体がIenumerable<int>
を作成しないということです。クエリに関連付けられたExpression Treeが作成されます。クエリによって返される要素は
Source.Reverse()
がクエリ自体ですが、とにかく...ので、奇妙な例のようなものだ。当然ながら)
public static IEnumerable<int> MyInvisibleFunction (List<int> Source)
{
foreach (int i in Source.Reverse())
{
if (i % 2 == 1)
{
yield return i;
}
}
}
のように、コンパイラによって作成された目に見えない機能でyield
編です
ここで私は表情の毛皮がここに遊びに来る混乱しています。私が表現した木を考えると、私が作った小さな世界では、
(3 % 1 > 0)
/ \
/ \
(3 % 1) > 0
/ \
3 % 1
のような木が考えられます。しかし、LINQクエリでは、そのようなツリーが再生されます。
from i in All
where i % 2 == 1
orderby i descending
select i
???それは私が理解していないものです。私はExpression classを見ていますが、私が示したツリーの例をどのように作成できるかを見ていますが、クエリの中でどこが再生されるのかわかりません。
ソースが通常のメモリ内リストであるため、式ツリーはクエリで機能しません。式ツリーは、ソースがSQLデータベースのようなもので、LINQがクエリをSQLに変換する必要がある場合に便利です。 –
私はLINQについてのあなたの信念に間違っていることをすべて記述することを始める方法もわかりません。それはすべて間違っているので、すべてのものを信じて停止します。私の助言は、C#仕様のコピーを入手し、LINQ変換のセクションを注意深く読んでください。 –
ヒラリー・クリントンは、(布を使って)サーバーを拭くことが意味することさえ知らないので、私はあなたがヒラリークリントンではないと確信しています。あなたのユーザー名は議論されている[ここ](http://meta.stackoverflow.com/questions/319809/what-is-the-policy-on-user-names-that-are-obvious-impersonators-of-actual-人)。個人的には、私はあなたや他の改造者があなたのためにやる前に、あなたのユーザー名を他のものに変更することを検討したいと思います。 –