0

これは、northwindデータベースを使用した本の例です。=>とはどういう意味ですか?

   Northwind db = new Northwind(@"Data Source=.\SQLEXPRESS;InitialCatalog=Northwind");
   var orders = db.Customers
   .Where(c => c.Country == "USA" && c.Region == "WA")
   .SelectMany(c => c.Orders);
    Console.WriteLine(orders.GetType());

なぜ彼らはただ書いてみませんか

   Where(c.Country == "USA" && c.Regian == "WA")
4

4 に答える 4

3

の括弧内の部分は、を取り、ean値を返す関数Where()である必要があります(これはC#の型システムにあります)。CustomerboolFunc<Customer, bool>

C#のラムダ式を使用してその関数を作成するのが最も一般的です。

このc =>部分は、「Customer渡されたものを取得して呼び出すことを意味しますc。次に、その値をc使用して、この条件を計算します。cの左側=>がないと、コンパイラは何cを参照しているかを知る方法がありません。

于 2012-05-14T00:34:21.283 に答える
1

これはラムダ式です。関数について説明します; 矢印の左側の変数は、関数のパラメーターです。この場合、関数には1つのパラメーターがあるため、矢印の左側に1つの変数があります。

あなたが与えた「なぜ彼らは...」の例を考えてみてください。どこでc宣言されますか?コンパイラはそれが何を表しているのかをどうやって知るのですか?

コンパイラがパラメータのタイプをどのように知っているのか不思議に思うかもしれませんが、それは明らかにプロパティcを呼び出すことができるためです。これは型推論で実現されます。このメソッドには、シーケンスのタイプ(この場合は)に依存するタイプのパラメーターを持つデリゲート引数が必要です。CountryRegionWhereCustomers

CustomersはであるためIEnumerable<Customer>、コンパイラーは単一のパラメーターを持つデリゲートを予期します。Customerしたがって、コンパイラーはラムダ式の単一のパラメーターをCustomer変数として扱います。

于 2012-05-14T00:34:31.400 に答える
1

彼らがこれを書いた場合:

Where(c.Country == "USA" && c.Regian == "WA")

変数が何を参照するかをどこで定義しますcか?私のコードのどこかで私が書いたとしたらどうでしょう:

var c = "this is a string";

この表記はラムダ構造を定義します。ここでc =>、関数が期待するデリゲート入力にバインドされWhereます。この場合、c各行にバインドされ、実行する関数cはブール値を返す必要があります。

次のような関数を作成できた可能性があることに注意してください。

public bool OnlyWA(Row c)
{
    return c.Country == "USA" && c.Regian == "WA";
}

そして、次のように使用しました。

var orders = db.Customers
               .Where(OnlyWA)
               .SelectMany(c => c.Orders);

cここでは、ラムダ変数ではなく名前付き関数を使用しているため、これ以上は必要ありません。関数の唯一のパラメーターは、の代わりに機能しますc。これは通常、小さな関数にとってはやり過ぎであり、小さな述語関数がその使用法(したがってコンテキスト)の場所から移動するため、さらに読みにくくなります。

于 2012-05-14T00:35:01.583 に答える
0

=> はラムダ演算子です ここを参照してください: msdn

これはラムダ式で使用され、左側の入力変数を右側のラムダ本体から分離します。ラムダ式は匿名メソッドに似たインライン式ですが、より柔軟です。これらは、メソッド構文で表現される LINQ クエリで広く使用されています。

于 2012-05-14T00:35:26.017 に答える