- 追加された行はこの色です。
- 削除された行はこの色です。
&tag(LINQtoObjects);
*目次 [#y32d9f90]
#contents
*参考情報 [#hb7deef0]
-[[LINQ to Objects:http://msdn.microsoft.com/ja-jp/library/bb397919.aspx]]
-[[よくあるコーディングパターンと LINQ to Objects の対応付け - ぐるぐる〜:http://d.hatena.ne.jp/bleis-tift/20110210/1297310411]]…ぱっと探したい時にわかりやすい。
*簡単なサンプル [#t5878f41]
**最初の要素を検索( [#d9c82fa2]
**最初の要素を検索 [#d9c82fa2]
-例外を発生させない場合FirstOrDefaultを使う。条件を指定することもできる
items.FirstOrDefault(x => x.Age == 10);
-Whereで条件を指定したあとFirstOrDefaultしても同じ。[[C# Linq Where(expression).FirstorDefault() vs .FirstOrDefault(expression) - Stack Overflow:http://stackoverflow.com/questions/8059285/c-sharp-linq-whereexpression-firstordefault-vs-firstordefaultexpression]]。
**要素が存在するかどうかを確認 [#x1a39187]
-Anyを使う
items.Any(x => x.Age == 10);
**要素を変換する [#xb8e24e5]
-Select().ToList()を使う。
List<int> ages = items.Select(x => x.Age).ToList();
**条件にあうものを抽出 [#h69fdeab]
**要素のメソッド呼び出し [#kbf34fc5]
-あるオブジェクトのメソッドを全部呼び出したい場合、List<T>ならばForEachが使える。[[.NET(C#)のLINQについての質問です。 List<T>にはForEachメソッドがありますが、IE... - Yahoo!知恵袋:http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1499143584]]。[[linq - call a function for each value in a generic c# collection - Stack Overflow:http://stackoverflow.com/questions/1883920/call-a-function-for-each-value-in-a-generic-c-sharp-collection]]
items.ForEach(x => x.Method);
-戻り値があるなら、Select(x = x.Value)みたいなのでもいけるかもしれないけど、Lazy Loadingが発生するので注意が必要。
**条件にあうものを抽出(古) [#h69fdeab]
-データのクラス
#pre{{
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public override string ToString()
{
return Name + " " + Age;
}
}
}}
-Listから15歳より大きいものを抽出。
#pre{{
List<Person> persons = new List<Person>();
persons.Add(new Person() { Name = "Ken", Age = 30 });
persons.Add(new Person() { Name = "Tom", Age = 10 });
persons.Add(new Person() { Name = "Mike", Age = 20 });
persons.Add(new Person() { Name = "Joe", Age = 30 });
var results = from Person person in persons
where person.Age > 15
select person;
foreach (Person person in results)
{
Debug.WriteLine(person);
}
//Mike 20
//Joe 30
//
}}