は、あなたがそれを理解するのに役立ちます:
fruits.Select((fruit, index) =>
new { index, str = fruit.Substring(0, index) });
Select(...)
=入力すると、内部に示されているように出力を返します。
(fruit, index)
=変数fruit
に選択した果物を割り当て、インデックス(Enumerableの位置)をindex
に割り当てます。前述のように、これはあなたに利用可能な1つのオーバーロード(オプション)です。インデックス値を気にしない場合は、単に省略してください。
=>
=は、匿名型のインスタンスを作成します。=次の値
new { ... }
を返します。このタイプには、index
とstr
という2つのプロパティがあります。 index
の値は、変数index
になります。 str
の値は果物の部分文字列の結果になります。
あなたは、単に果物をしたいのであれば、あなたはそうのようにそれを書き換えることができます:
fruits.Select(fruit => fruit);
それでもインデックスをしたい場合は、果物の完全な名前で:
fruits.Select((fruit, index) =>
new { index, str = fruit});
選択入力内容とは異なる情報セットを返すのに便利です。あなたはそのようなクラスを持っていた場合、例えば
:もう少し複雑なシナリオを使用した例として
public class Customer {
public int Id {get; set;}
public string Name { get; set;}
public List<Order> Orders { get; set;}
}
public class Order {
public int Id { get;set;}
public double TotalOrderValue { get;set}
}
あなたは、顧客を返すために、単純なSELECTステートメントを使用することができ
と顧客がこれまでに発注したことをどのくらいの合計は:私たちは、例えば、10件の最大の浪費家を取得したい場合
var customersTotalSpend = customers.Select(
customer =>
new {
customer,
TotalSpend = customer.Orders.Select(order => order.TotalOrderValue).Sum()
});
私たちは、そのTotalSpend値で何かを行うことができます:
var biggestCustomers = customersTotalSpend.OrderByDescending(customerSpend=> customer.TotalSpend).Take(10);
今は意味がありますか?
「あなたが最初の文字の代わりに私にオブジェクト全体(この場合は文字列)を返すというクエリが必要です」とはどういう意味ですか? –
私はあなたが構文を学んだりしようとしているとか、実際にもっと複雑なものが必要だと思っています。それ以外の場合は、単純な 'foreach(果実のvar fruit) 'ループを使用し、LINQ構文を完全にスキップすると仮定します。 –
@Wonko the Sane:関連インデックスと対応するオブジェクトが必要です。 foreachが0から* count *まで、* count *から0まで、または無作為に繰り返すかどうかは不明です。 – serhio