A、LINQアーキテクチャ
LINQは、5つの部分の合計が含まれています。
- メモリコレクションの操作:オブジェクトへのLINQ。
- データソースのXML操作:XMLにLINQ。
- LINQ to SQLは:SQL Serverデータソースの操作は、MicrosoftがSQLにエンティティ、LINQにLINQにSQLにLINQからのシフトの開発に注力されており、もはや更新を提供しないと宣言しました。
- エンティティへのLINQ:Entity Frameworkのは一部であり、データベースで使用される標準的なメカニズムとしてSQLにLINQ LINQを置換しました。
- データセットにLINQ:データに対する操作のDataTableのセット。
二、LINQ構文
LINQのクエリ式は、句または選択したグループの句の末尾に句から始まります。2つの句の間に、どこで使用することができる、ORDERBY、参加、クエリ演算子のようにしましょう。「遅延評価」の特徴を有します。
簡単な例である以下、クエリint配列要素は5未満であり、昇順に配置します:
INT [] ARR = 新しい INT [] { 1、4、2、6、7、9、5、1、2、4 }。 VaRのクエリ= から R に到着 ここで R < 5 ORDERBYのR セレクトR。
foreachの(VARの項目にクエリ) { Console.WriteLineを(アイテム)。 } Console.ReadLine();
LINQは、二つの構文があります:ラムダクエリの構文と文法を、
コンパイラは、適切な拡張メソッドを呼び出すために組み立て時にLINQクエリを変換します。
关键字有:、どこから、選択し、グループの中に、ORDERBY、で、聞かせて、参加する、等しい、ことによって、昇順、降順等に。
LINQクエリ式
キーワード |
機能 |
...で... |
データ・ソースを指定し、複数のデータソースから検索句データを前記複数の変数の範囲を見つけること。 注: C#コンパイラは、「化合物句から「クエリ式にSelectMany()拡張メソッド。 |
参加...に...に...等しいです... |
連想複数のデータソースを指定します。 |
てみましょう |
式の結果の式中性子保存されたクエリの変数のスコープを導入。多くの場合、読みコードが容易になり、奥行きのより良い感覚を実現。 |
ORDERBY、降順 |
ソートフィールドと並べ替えの要素を指定します。ソート複数のフィールドがある場合、プライマリおよびセカンダリにより決定フィールド順が昇順と降順ソートの二種類を指定することができ |
どこ |
フィルタ基準要素を指定します。where句複数、すべての資格を得るために満たす必要があり、タイの条件で述べています。句述語を&&、||条件式の複数に接続された場合に各々が使用されてもよいです。 |
グループ |
要素は、グループ化フィールドを指定します。 |
選択 |
返されるクエリ対象のデータを指定し、あなたは、さえ匿名型を任意の型を指定することができます。(現在、多くの場合、匿名型として指定) |
に |
一時的な識別子を提供します。識別の結果は、グループに参加する参照、及び句を選択することができます。 1)キーワードにJOIN句をに翻訳された直後に表示されますGroupJoin。(変数への問い合わせが引き続き使用することができます前に) 2)選択またはグループ句の後に、それは我々がどこ、orderbyの導入を続けることができるように、クエリを再起動し、句を選びますに、それは、クエリ式の簡単な方法を構築するためのステップバイステップです。(変数に照会する前に利用できなくなりました) |
以下扩展方法存在对应的查询表达式关键字:
Where、Select、SelectMany、OrderBy、ThenBy、OrderByDescending、ThenByDescending、GroupBy、Join、GroupJoin。
三、标准查询操作符
Enumberable 类定义的标准查询操作符。
类别 |
标准查询操作符 |
说明 |
筛选操作符 |
Where OfType<TResult> |
称为筛选操作符定义返回元素的条件。 Where 使用谓词,返回符合条件的元素。 OfType<TResult> 返回符合类型的元素。 |
投射操作符 |
Select SelectMany |
投射操作符用于把对象转换为另一个类型的新对象。 Select 和 SelectMany 定义根据选择器函数选择结果值的投射。 |
排序操作符 |
OrderBy ThenBy OrderByDescending ThenByDescending Reverse |
排序操作符改变返回的元素的顺序。 Orderby 升序排序。 OrderBydescending 降序排序。 TheBy 和 ThenByDescending 二次排序。 Reverse 反转集合元素。 |
连接操作符 |
Join GroupJoin |
用于合并不直接相关的集合。 Join 根据键选择器函数连接两个集合。 GroupJoin 连接两个集合。 |
组合操作符 |
GroupBy ToLookup |
组合操作符把数据放在组中。 GroupBy 组合公共键的元素。 Tookup 创建一个一对多字典,组合元素。 |
限定操作符 |
Any All Contains |
元素满足指定的条件。 Any 满足谓词函数的函数。 All 所有元素是否都满足谓词函数。 Contains 检查某个元素是否在集合中。 |
分区操作符 |
Take Skip TakeWhile SkipWhile |
返回集合的子集。 Take 从集合提取元素个数。 Skip 跳过指定的元素个数,提取其他元素。 TakeWhile 提取条件为真的元素。 |
Set操作符 |
Distinct Union Intersect Except Zip |
Set操作符返回一个集合。 Distinct 删除重复的元素。 Union 返回集合中唯一元素。 Intersect 返回两个集合都有的元素。 Except 只出现在一个集合中的元素。 Zip 两个集合合并为一个元素。 |
元素操作符 |
First FirstOrDefault Last LastOrDefault ElementAt ElementAtOrDefault Single SingleOrDefault |
元素操作符返回一个元素。 First 返回第一个满足条件的元素。 FirstOrDefault 类似First,如果未找到满足条件元素,返回类型的默认值。 Last 返回最后一个满足条件的元素。 ElementAt 返回元素的位置。 Single 返回一个满足条件的元素。如果有多个元素都满足条件,就抛出一个异常。 |
聚合操作符 |
Count Sum Min Max Average Aggregate |
聚合操作符计算集合值。 Sum 总和。 Count 所有元素个数。 Min 最小元素。 Max 最大元素。 Average 平均值。 Aggregate 根据输入的表达式获取聚合值。 |
转换操作符 |
ToArray AsEnumerable ToList ToDictionary Cast<TResult> |
|
生成操作符 |
Empty Range Repeat |
Empty 空集合。 Range 返回一系列数字。 Repeat 返回始终重复一直的集合。
|
一、 示例业务背景介绍
示例参考《C#高级编程(第六版)》LINQ章节(P267 - P296),进行改编。
打开示例代码我们看到:
1. Racer.csファイル、フォーミュラワン世界の定義選手権の情報を。
2. Team.csファイル、フォーミュラワン世界の定義チームチャンピオンシップ情報を。
3. Formula1.csファイルには、二つの重要な静的メソッドが含まれています(F1は「フォーミュラワン」のための略語です)
1)GetChampions():ライダーのグループのリストを返します。このリストは、今年19502007の間のすべてのフォーミュラワン世界が含まれてい選手権。
2)GetContructorChampions():チームのリストの配列を返します。このリストは、今年19852007回の間のすべてのフォーミュラワン世界含まれているコンストラクターズチャンピオンシップを。