「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>データアクセスのいろいろ]]
-戻る
--[[.NET開発]]
--[[データアクセスのいろいろ]]

* 目次 [#pe9137b3]
#contents

*概要 [#f95ddfa0]
統合言語クエリ (LINQ: Language-Integrated Query)

*構文 [#a9baa86f]
クエリは、
-クエリ式の構文
-メソッド ベースのクエリ構文
-[[クエリ式の構文>#l9e94201]]
-[[メソッド ベースのクエリ構文>#g1695dc7]]

という 2 とおりの構文を使って作成できる。
 
**クエリ式の構文 [#l9e94201]
SQLっぽい書き方([[例>#ea117d77]])。

**メソッド ベースのクエリ構文 [#g1695dc7]
Fluent API(≒ メソッド・チェーン)的に書く書き方([[例>#pe4bb771]])。

*LINQ to Objects [#b29ceb6f]
http://msdn.microsoft.com/ja-jp/library/vstudio/bb397919.aspx

**匿名型配列 + クエリ式の構文例 [#c4c5f310]
-LINQ to Objectで抽出と並び替え(配列編)  どっとねっとふぁん~
https://blogonos.wordpress.com/2007/09/06/linq-to-object%E3%81%A7%E6%8A%BD%E5%87%BA%E3%81%A8%E4%B8%A6%E3%81%B3%E6%9B%BF%E3%81%88%EF%BC%88%E9%85%8D%E5%88%97%E7%B7%A8%EF%BC%89/

***匿名型配列 [#m932251b]
            var AnonymousType = new[]{ 
               new { 年度=2013, 種別=14, 生年度=1979,平均人員=200,支給年金額=120000}, 
               new { 年度=2012, 種別=15, 生年度=1980,平均人員=120,支給年金額=65000}, 
               new { 年度=2012, 種別=21, 生年度=1981,平均人員=25,支給年金額=23000}, 
               new { 年度=2010, 種別=43, 生年度=1982,平均人員=12,支給年金額=12000}, 
               new { 年度=2012, 種別=21, 生年度=1981,平均人員=25,支給年金額=23000}
            };
 var AnonymousType = new[]{ 
    new { 年度=2013, 種別=14, 生年度=1979,平均人員=200,支給年金額=120000}, 
    new { 年度=2012, 種別=15, 生年度=1980,平均人員=120,支給年金額=65000}, 
    new { 年度=2012, 種別=21, 生年度=1981,平均人員=25,支給年金額=23000}, 
    new { 年度=2010, 種別=43, 生年度=1982,平均人員=12,支給年金額=12000}, 
    new { 年度=2012, 種別=21, 生年度=1981,平均人員=25,支給年金額=23000}
 };
  
***クエリ式の構文例 [#xe281cf8]
            Console.WriteLine("匿名型配列 + クエリ式の構文例");
            Console.WriteLine("--------------------------------------------------");
            
            var query1 = from p in AnonymousType
                      where p.年度 == 2012
                      select new {
                          p.年度,
                          p.種別,
                          p.生年度,
                          平均人員2 = p.平均人員 / 12,
                          p.支給年金額
                      };
            
            foreach (var item in query1)
            {
                Console.WriteLine("年度={0}, 種別={1}, 生年度={2}, 平均人員2={3}, 支給年金額={4}", 
                    item.年度, item.種別, item.生年度, item.平均人員2, item.支給年金額);
            }
 Console.WriteLine("匿名型配列 + クエリ式の構文例");
 Console.WriteLine("--------------------------------------------------");
 
 var query1 = from p in AnonymousType
           where p.年度 == 2012
           select new {
    p.年度,
    p.種別,
    p.生年度,
    平均人員2 = p.平均人員 / 12,
    p.支給年金額
           };
 
 foreach (var item in query1)
 {
     Console.WriteLine("年度={0}, 種別={1}, 生年度={2}, 平均人員2={3}, 支給年金額={4}", 
         item.年度, item.種別, item.生年度, item.平均人員2, item.支給年金額);
 }

**クラス(POCO) + クエリ式の構文例 [#af4ac3ad]
***クラス(POCO) [#xe281cf8]

***クラス(POCO) [#ad0f9b0a]

    class BeanClass
    {
        public int 年度;
        public int 種別;
        public int 生年度;
        public int 平均人員2;
        public int 支給年金額;
    }

***クエリ式の構文例 [#xe281cf8]
***クエリ式の構文例 [#ea117d77]

            Console.WriteLine("匿名型配列 + クエリ式の構文例(クラス指定)");
            Console.WriteLine("--------------------------------------------------");
            
            var query2 = from p in AnonymousType
                         where p.年度 == 2012
                         select new BeanClass
                         {
                             年度 = p.年度,
                             種別 = p.種別,
                             生年度 = p.生年度,
                             平均人員2 = p.平均人員 / 12,
                             支給年金額 = p.支給年金額
                         };
            
            foreach (var item in query2)
            {
                Console.WriteLine("年度={0}, 種別={1}, 生年度={2}, 平均人員2={3}, 支給年金額={4}",
                    item.年度, item.種別, item.生年度, item.平均人員2, item.支給年金額);
            }
            
            Console.WriteLine("--------------------------------------------------");
            Console.ReadKey();
 Console.WriteLine("匿名型配列 + クエリ式の構文例(クラス指定)");
 Console.WriteLine("--------------------------------------------------");
 
 var query2 = from p in AnonymousType
   where p.年度 == 2012
   select new BeanClass
   {
       年度 = p.年度,
       種別 = p.種別,
       生年度 = p.生年度,
       平均人員2 = p.平均人員 / 12,
       支給年金額 = p.支給年金額
   };
 
 foreach (var item in query2)
 {
     Console.WriteLine("年度={0}, 種別={1}, 生年度={2}, 平均人員2={3}, 支給年金額={4}",
         item.年度, item.種別, item.生年度, item.平均人員2, item.支給年金額);
 }
 
 Console.WriteLine("--------------------------------------------------");
 Console.ReadKey();

***メソッド ベースのクエリ構文例 + GroupBy [#pe4bb771]
            
            Console.WriteLine("匿名型配列 + メソッド ベースのクエリ構文例 + GroupBy");
            Console.WriteLine("--------------------------------------------------");
            
            // 参考
            var query8 = AnonymousType
                .Where(p => p.年度 == 2012)
                .GroupBy(p => new { p.年度, p.種別 })
                .Select(p => new
                {
                    年度 = p.Key.年度,
                    種別 = p.Key.種別,
                    平均人員2合計 = p.Sum(x => x.平均人員) / 12,
                    支給年金額合計 = p.Sum(x => x.支給年金額)
                });
            
            foreach (var item in query8)
            {
                Console.WriteLine("年度={0}, 種別={1}, 平均人員2合計={2}, 支給年金額合計={3}",
                    item.年度, item.種別, item.平均人員2合計, item.支給年金額合計);
            }
 
 Console.WriteLine("匿名型配列 + メソッド ベースのクエリ構文例 + GroupBy");
 Console.WriteLine("--------------------------------------------------");
 
 // 参考
 var query8 = AnonymousType
     .Where(p => p.年度 == 2012)
     .GroupBy(p => new { p.年度, p.種別 })
     .Select(p => new
     {
         年度 = p.Key.年度,
         種別 = p.Key.種別,
         平均人員2合計 = p.Sum(x => x.平均人員) / 12,
         支給年金額合計 = p.Sum(x => x.支給年金額)
     });
 
 foreach (var item in query8)
 {
     Console.WriteLine("年度={0}, 種別={1}, 平均人員2合計={2}, 支給年金額合計={3}",
         item.年度, item.種別, item.平均人員2合計, item.支給年金額合計);
 }

**インデクサList + クエリ式の構文例 [#h05d57aa]
***インデクサList [#i666a04c]
            List<DataRow> RowList = new List<DataRow>();
            
            DataTable dt = new DataTable();
            dt.Columns.Add(new DataColumn("年度", typeof(int)));
            dt.Columns.Add(new DataColumn("種別", typeof(int)));
            dt.Columns.Add(new DataColumn("生年度", typeof(int)));
            dt.Columns.Add(new DataColumn("平均人員", typeof(int)));
            dt.Columns.Add(new DataColumn("支給年金額", typeof(int)));
            
            dr = dt.NewRow();
            
            dr["年度"] = 2013;
            dr["種別"] = 14;
            dr["生年度"] = 1979;
            dr["平均人員"] = 200;
            dr["支給年金額"] = 120000;
            
            RowList.Add(dr);
            
            dr = dt.NewRow();
            
            dr["年度"] = 2012;
            dr["種別"] = 15;
            dr["生年度"] = 1980;
            dr["平均人員"] = 120;
            dr["支給年金額"] = 65000;
            
            RowList.Add(dr);
            
            dr = dt.NewRow();
            
            dr["年度"] = 2012;
            dr["種別"] = 21;
            dr["生年度"] = 1981;
            dr["平均人員"] = 25;
            dr["支給年金額"] = 23000;
            
            RowList.Add(dr);
            
            dr = dt.NewRow();
            
            dr["年度"] = 2010;
            dr["種別"] = 43;
            dr["生年度"] = 1982;
            dr["平均人員"] = 12;
            dr["支給年金額"] = 12000;
            
            RowList.Add(dr);
            
            dr = dt.NewRow();
            
            dr["年度"] = 2012;
            dr["種別"] = 21;
            dr["生年度"] = 1981;
            dr["平均人員"] = 25;
            dr["支給年金額"] = 23000;
            
            RowList.Add(dr);
 List<DataRow> RowList = new List<DataRow>();
 
 DataTable dt = new DataTable();
 dt.Columns.Add(new DataColumn("年度", typeof(int)));
 dt.Columns.Add(new DataColumn("種別", typeof(int)));
 dt.Columns.Add(new DataColumn("生年度", typeof(int)));
 dt.Columns.Add(new DataColumn("平均人員", typeof(int)));
 dt.Columns.Add(new DataColumn("支給年金額", typeof(int)));
 
 dr = dt.NewRow();
 
 dr["年度"] = 2013;
 dr["種別"] = 14;
 dr["生年度"] = 1979;
 dr["平均人員"] = 200;
 dr["支給年金額"] = 120000;
 
 RowList.Add(dr);
 
 dr = dt.NewRow();
 
 dr["年度"] = 2012;
 dr["種別"] = 15;
 dr["生年度"] = 1980;
 dr["平均人員"] = 120;
 dr["支給年金額"] = 65000;
 
 RowList.Add(dr);
 
 dr = dt.NewRow();
 
 dr["年度"] = 2012;
 dr["種別"] = 21;
 dr["生年度"] = 1981;
 dr["平均人員"] = 25;
 dr["支給年金額"] = 23000;
 
 RowList.Add(dr);
 
 dr = dt.NewRow();
 
 dr["年度"] = 2010;
 dr["種別"] = 43;
 dr["生年度"] = 1982;
 dr["平均人員"] = 12;
 dr["支給年金額"] = 12000;
 
 RowList.Add(dr);
 
 dr = dt.NewRow();
 
 dr["年度"] = 2012;
 dr["種別"] = 21;
 dr["生年度"] = 1981;
 dr["平均人員"] = 25;
 dr["支給年金額"] = 23000;
 
 RowList.Add(dr);

***クエリ式の構文例 [#w9e4aabb]

            Console.WriteLine("List<DataRow> + クエリ式の構文例");
            Console.WriteLine("--------------------------------------------------");
            
            var query4 = from p in RowList
                       where p.Field<int>("年度") == 2012
                       select new
                       {
                           年度 = p.Field<int>("年度"),
                           種別 = p.Field<int>("種別"),
                           生年度 = p.Field<int>("生年度"),
                           平均人員2 = p.Field<int>("平均人員") / 12,
                           支給年金額 = p.Field<int>("支給年金額")
                       };
            
            foreach (var item in query4)
            {
                Console.WriteLine("年度={0}, 種別={1}, 生年度={2}, 平均人員2={3}, 支給年金額={4}",
                    item.年度, item.種別, item.生年度, item.平均人員2, item.支給年金額);
            }
            
            Console.WriteLine("--------------------------------------------------");
            Console.ReadKey();
            
 Console.WriteLine("List<DataRow> + クエリ式の構文例");
 Console.WriteLine("--------------------------------------------------");
 
 var query4 = from p in RowList
     where p.Field<int>("年度") == 2012
     select new
     {
         年度 = p.Field<int>("年度"),
         種別 = p.Field<int>("種別"),
         生年度 = p.Field<int>("生年度"),
         平均人員2 = p.Field<int>("平均人員") / 12,
         支給年金額 = p.Field<int>("支給年金額")
     };
 
 foreach (var item in query4)
 {
     Console.WriteLine("年度={0}, 種別={1}, 生年度={2}, 平均人員2={3}, 支給年金額={4}",
         item.年度, item.種別, item.生年度, item.平均人員2, item.支給年金額);
 }
 
 Console.WriteLine("--------------------------------------------------");
 Console.ReadKey();
 
***メソッド ベースのクエリ構文例 [#w787e665]
            Console.WriteLine("List<DataRow> + メソッド ベースのクエリ構文例");
            Console.WriteLine("--------------------------------------------------");
            
            var query5 = RowList
                .Where(p => p.Field<int>("年度") == 2012)
                .Select(p => new
            {
                年度 = p.Field<int>("年度"),
                種別 = p.Field<int>("種別"),
                生年度 = p.Field<int>("生年度"),
                平均人員2 = p.Field<int>("平均人員") / 12,
                支給年金額 = p.Field<int>("支給年金額")
            });
            
            foreach (var item in query5)
            {
                Console.WriteLine("年度={0}, 種別={1}, 生年度={2}, 平均人員2={3}, 支給年金額={4}",
                    item.年度, item.種別, item.生年度, item.平均人員2, item.支給年金額);
            }
            
            Console.WriteLine("--------------------------------------------------");
            Console.ReadKey();
            
 Console.WriteLine("List<DataRow> + メソッド ベースのクエリ構文例");
 Console.WriteLine("--------------------------------------------------");
 
 var query5 = RowList
     .Where(p => p.Field<int>("年度") == 2012)
     .Select(p => new
 {
     年度 = p.Field<int>("年度"),
     種別 = p.Field<int>("種別"),
     生年度 = p.Field<int>("生年度"),
     平均人員2 = p.Field<int>("平均人員") / 12,
     支給年金額 = p.Field<int>("支給年金額")
 });
 
 foreach (var item in query5)
 {
     Console.WriteLine("年度={0}, 種別={1}, 生年度={2}, 平均人員2={3}, 支給年金額={4}",
         item.年度, item.種別, item.生年度, item.平均人員2, item.支給年金額);
 }
 
 Console.WriteLine("--------------------------------------------------");
 Console.ReadKey();
 
*** + メソッド ベースのクエリ構文例 + GroupBy [#w787e665]
            
            Console.WriteLine("List<DataRow> + メソッド ベースのクエリ構文例 + GroupBy");
            Console.WriteLine("--------------------------------------------------");
            
            // WhereとGroupByの両方を記述できない。
            var query6 = RowList
                .Where(p => p.Field<int>("年度") == 2012)
                .Select(p => new
            {
                年度 = p.Field<int>("年度"),
                種別 = p.Field<int>("種別"),
                生年度 = p.Field<int>("生年度"),
                平均人員2 = p.Field<int>("平均人員") / 12,
                支給年金額 = p.Field<int>("支給年金額")
            });
            
            var query7 = query6
                .GroupBy(p => new { p.年度, p.種別 })
                .Select(p => new
            {
                年度 = p.Key.年度,
                種別 = p.Key.種別,
                平均人員2合計 = p.Sum(x => x.平均人員2),
                支給年金額合計 = p.Sum(x => x.支給年金額)
            });
            
            foreach (var item in query7)
            {
                Console.WriteLine("年度={0}, 平均人員2合計={1}, 支給年金額合計={2}",
                    item.年度, item.平均人員2合計, item.支給年金額合計);
            }
            
            Console.WriteLine("--------------------------------------------------");
            Console.ReadKey();
 
 Console.WriteLine("List<DataRow> + メソッド ベースのクエリ構文例 + GroupBy");
 Console.WriteLine("--------------------------------------------------");
 
 // WhereとGroupByの両方を記述できない。
 var query6 = RowList
     .Where(p => p.Field<int>("年度") == 2012)
     .Select(p => new
 {
     年度 = p.Field<int>("年度"),
     種別 = p.Field<int>("種別"),
     生年度 = p.Field<int>("生年度"),
     平均人員2 = p.Field<int>("平均人員") / 12,
     支給年金額 = p.Field<int>("支給年金額")
 });
 
 var query7 = query6
     .GroupBy(p => new { p.年度, p.種別 })
     .Select(p => new
 {
     年度 = p.Key.年度,
     種別 = p.Key.種別,
     平均人員2合計 = p.Sum(x => x.平均人員2),
     支給年金額合計 = p.Sum(x => x.支給年金額)
 });
 
 foreach (var item in query7)
 {
     Console.WriteLine("年度={0}, 平均人員2合計={1}, 支給年金額合計={2}",
         item.年度, item.平均人員2合計, item.支給年金額合計);
 }
 
 Console.WriteLine("--------------------------------------------------");
 Console.ReadKey();

*LINQ to DataSet [#pb7c85c5]
http://msdn.microsoft.com/ja-jp/library/vstudio/bb386977.aspx
*データアクセス [#p99a8106]

**DataTable + クエリ式の構文例 [#cc1f69dc]
            DataTable dt = new DataTable();
            dt.Columns.Add(new DataColumn("年度", typeof(int)));
            dt.Columns.Add(new DataColumn("種別", typeof(int)));
            dt.Columns.Add(new DataColumn("生年度", typeof(int)));
            dt.Columns.Add(new DataColumn("平均人員", typeof(int)));
            dt.Columns.Add(new DataColumn("支給年金額", typeof(int)));
            
            DataRow dr = null;
            
            dr = dt.NewRow();
            
            dr["年度"] =2013;
            dr["種別"] =14;
            dr["生年度"] =1979;
            dr["平均人員"] =200;
            dr["支給年金額"] =120000;
            
            dt.Rows.Add(dr);
            
            dr = dt.NewRow();
            
            dr["年度"] =2012;
            dr["種別"] =15;
            dr["生年度"] =1980;
            dr["平均人員"] =120;
            dr["支給年金額"] =65000;
            
            dt.Rows.Add(dr);
            
            dr = dt.NewRow();
            
            dr["年度"] = 2012;
            dr["種別"] =21;
            dr["生年度"] =1981;
            dr["平均人員"] =25;
            dr["支給年金額"] =23000;
            
            dt.Rows.Add(dr);
            
            dr = dt.NewRow();
            
            dr["年度"] =2010;
            dr["種別"] =43;
            dr["生年度"] =1982;
            dr["平均人員"] =12;
            dr["支給年金額"] =12000;
            
            dt.Rows.Add(dr);
            
            dr = dt.NewRow();
            
            dr["年度"] = 2012;
            dr["種別"] = 21;
            dr["生年度"] = 1981;
            dr["平均人員"] = 25;
            dr["支給年金額"] = 23000;
            
            dt.Rows.Add(dr);
            
            // --------------------------------------------------
            
            Console.WriteLine("DataTable + クエリ式の構文例");
            Console.WriteLine("--------------------------------------------------");
            
            var query3 = from p in dt.AsEnumerable()
                      where p.Field<int>("年度") == 2012
                      select new
                      {
                          年度 = p.Field<int>("年度"),
                          種別 = p.Field<int>("種別"),
                          生年度 = p.Field<int>("生年度"),
                          平均人員2 = p.Field<int>("平均人員") / 12,
                          支給年金額 = p.Field<int>("支給年金額")
                      };
            
            foreach (var item in query3)
            {
                Console.WriteLine("年度={0}, 種別={1}, 生年度={2}, 平均人員2={3}, 支給年金額={4}",
                    item.年度, item.種別, item.生年度, item.平均人員2, item.支給年金額);
            }
            
            Console.WriteLine("--------------------------------------------------");
            Console.ReadKey();

*LINQ to SQL [#bcbba76f]
**LINQ to SQL [#bcbba76f]
http://msdn.microsoft.com/ja-jp/library/bb386976.aspx

-LINQ と呼ばれるクエリで DB アクセスを行う手法。
-LINQ で書かれたクエリは最適化された SQL に変換され発行される。
-LINQ to SQL で実行可能なSQL は、SELECT のみである。

2008年11月にLINQ to SQLはdisconとなり(ADO.NET [[Entity Framework]] と融合し)、~
以降はADO.NET [[Entity Framework]]の[[LINQ to Entities>#y9bce357]]として利用することになる。

**[[LINQ to Entities>Entity Framework#b48c3a6f]] [#y9bce357]

**参考 [#e99954ba]
-Linq to SQLって死滅しちゃうの - ものがたり~
http://d.hatena.ne.jp/atsushieno/20080609/p1

--OakLeaf Systems Is the ADO.NET Team Abandoning LINQ to SQL~
http://oakleafblog.blogspot.jp/2008/05/is-adonet-team-abandoning-linq-to-sql.html

-Linq to SQLが死滅するようです。って当然じゃん。 - ものがたり~
http://d.hatena.ne.jp/atsushieno/20081103/p1

--Update on LINQ to SQL and LINQ to Entities Roadmap~
ADO.NET Blog - Site Home - MSDN Blogs~
http://blogs.msdn.com/b/adonet/archive/2008/10/29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx

--Is LINQ to SQL Truly Dead~
http://www.infoq.com/news/2008/11/DLINQ-Future

-LINQ to SQLは本当に終わりなのか?~
http://www.infoq.com/jp/news/2008/11/DLINQ-Future

-ADO.NET Entity Framework~
http://www.slideshare.net/daisukei/daisukei-ef/13

*[[LINQ to Entities>Entity Framework#b48c3a6f]] [#y9bce357]
*その他 [#i6213d30]

*LINQ to Dynamics CRM  [#y3c49387]
**LINQ to DataSet [#pb7c85c5]
http://msdn.microsoft.com/ja-jp/library/vstudio/bb386977.aspx

 DataTable dt = new DataTable();
 dt.Columns.Add(new DataColumn("年度", typeof(int)));
 dt.Columns.Add(new DataColumn("種別", typeof(int)));
 dt.Columns.Add(new DataColumn("生年度", typeof(int)));
 dt.Columns.Add(new DataColumn("平均人員", typeof(int)));
 dt.Columns.Add(new DataColumn("支給年金額", typeof(int)));
 
 DataRow dr = null;
 
 dr = dt.NewRow();
 
 dr["年度"] =2013;
 dr["種別"] =14;
 dr["生年度"] =1979;
 dr["平均人員"] =200;
 dr["支給年金額"] =120000;
 
 dt.Rows.Add(dr);
 
 dr = dt.NewRow();
 
 dr["年度"] =2012;
 dr["種別"] =15;
 dr["生年度"] =1980;
 dr["平均人員"] =120;
 dr["支給年金額"] =65000;
 
 dt.Rows.Add(dr);
 
 dr = dt.NewRow();
 
 dr["年度"] = 2012;
 dr["種別"] =21;
 dr["生年度"] =1981;
 dr["平均人員"] =25;
 dr["支給年金額"] =23000;
 
 dt.Rows.Add(dr);
 
 dr = dt.NewRow();
 
 dr["年度"] =2010;
 dr["種別"] =43;
 dr["生年度"] =1982;
 dr["平均人員"] =12;
 dr["支給年金額"] =12000;
 
 dt.Rows.Add(dr);
 
 dr = dt.NewRow();
 
 dr["年度"] = 2012;
 dr["種別"] = 21;
 dr["生年度"] = 1981;
 dr["平均人員"] = 25;
 dr["支給年金額"] = 23000;
 
 dt.Rows.Add(dr);
 
 // --------------------------------------------------
 
 Console.WriteLine("DataTable + クエリ式の構文例");
 Console.WriteLine("--------------------------------------------------");
 
 var query3 = from p in dt.AsEnumerable()
     where p.Field<int>("年度") == 2012
     select new
     {
         年度 = p.Field<int>("年度"),
         種別 = p.Field<int>("種別"),
         生年度 = p.Field<int>("生年度"),
         平均人員2 = p.Field<int>("平均人員") / 12,
         支給年金額 = p.Field<int>("支給年金額")
     };
 
 foreach (var item in query3)
 {
     Console.WriteLine("年度={0}, 種別={1}, 生年度={2}, 平均人員2={3}, 支給年金額={4}",
         item.年度, item.種別, item.生年度, item.平均人員2, item.支給年金額);
 }
 
 Console.WriteLine("--------------------------------------------------");
 Console.ReadKey();

**LINQ to Dynamics CRM  [#y3c49387]
-いろいろなサンプルを見ると

--書けているケースと
--書けていないケースが

>ありますが、

-これは、
--それぞれ、プロバイダ(LINQ to xxx)のサポートする処理が異なるためです。
--例えば、他のプロバイダ(LINQ to xxx)ではOUTER JOINも実装可能です。

-参考
--C# LINQ to SQL で LEFT OUTER JOIN をシンプル記述する~
http://programmers.high-way.info/cs/linqtosql-join.html
--Use LINQ to Construct a Query~
http://msdn.microsoft.com/en-us/library/gg328328.aspx
---join~
Represents an inner join. You cannot perform outer joins.

*参考 [#q8caa5ff]

**内部 [#sbeecfc7]

***[[ラムダ式って]] [#c7702400]
***[[式木(Expression Tree)]] [#g27ceabe]

**msdn [#o6346ae4]

-LINQ to Objects~
http://msdn.microsoft.com/ja-jp/library/vstudio/bb397919.aspx
-LINQ to DataSet~
http://msdn.microsoft.com/ja-jp/library/vstudio/bb386977.aspx
-LINQ to Entities~
http://msdn.microsoft.com/ja-jp/library/vstudio/bb386964.aspx
-LINQ to SQL [LINQ to SQL]~
http://msdn.microsoft.com/ja-jp/library/bb386976.aspx

***構文例 [#r6e0a977]

-クエリ式の構文例 射影 (LINQ to DataSet)~
http://msdn.microsoft.com/ja-jp/library/vstudio/bb386943.aspx
-クエリ式の構文例  射影 (LINQ to Entities)~
http://msdn.microsoft.com/ja-jp/library/bb738447.aspx
-メソッド ベースのクエリ構文例  射影 (LINQ to DataSet)~
http://msdn.microsoft.com/ja-jp/library/vstudio/bb669069.aspx
-メソッド ベースのクエリ構文例  射影 (LINQ to Entities)~
http://msdn.microsoft.com/ja-jp/library/bb896275.aspx

**その他 [#h73a42ab]
-LINQ (C# によるプログラミング入門)~
http://ufcpp.net/study/csharp/sp3_linq.html

***LINQ to Object [#b815c776]
-MTG Blog ◆LINQで射影(Select)~
http://madogiwatosan.blogspot.jp/2011/04/linqselect.html
-LINQ to Objects で グループ化 - 当面C#と.NETな記録~
http://d.hatena.ne.jp/siokoshou/20070726/p1
-Linq入門記-27 (LINQ To Object, GroupBy) - いろいろ備忘録日記~
http://d.hatena.ne.jp/gsf_zero1/20100819/p1
-.net - LinQ to objects GroupBy() by object and Sum() by amount - Stack Overflow~
http://stackoverflow.com/questions/2551086/linq-to-objects-groupby-by-object-and-sum-by-amount

***パフォーマンス関連 [#e1e71edc]
-LINQとfor文のコスト検証 - 渋谷ほととぎす通信~
http://www.shibuya24.info/entry/2017/04/20/090000
-半端にLINQを使う悪手の代表例 - C#+WPFチューニング戦記~
http://proprogrammer.hatenadiary.jp/entry/2014/08/17/022958
-neue cc - LINQのWhereやSelect連打のパフォーマンス最適化について~
http://neue.cc/2012/03/08_367.html
-C#でLinqを使うよりPythonの方が2倍速かったのでベンチマークをしてみた - Qiita~
https://qiita.com/yniji/items/6585011633289a257888

----
Tags: [[:.NET開発]], [[:データアクセス]], [[:ADO.NET]], [[:Entity Framework]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS