C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■90109 / )  Re[3]: LINQでJOIN時のエラーについて
□投稿者/ WebSurfer (1750回)-(2019/02/09(Sat) 11:54:52)
No90107 (レイ さん) に返信

質問者さんのコードと似たような(あくまで似たような)サンプルを作って試してみましたが
エラーは再現できませんでした。

質問者さんのコードは理解できませんし、エラーは再現できないということで原因不明です。

ただ、No90108 の私のレスで書いた「LINQにも色々 〜SQLに変換されるモノと変換されないモ
ノ」は関係なさそうな感じです。

ご参考に、自分が作ったサンプルのコードをアップしておきます。

DB は Microsoft が提供する SQL Server サンプルデータベース Northwind で、それから
Visual Studio のウィザードを使って ADO.NET Entity Data Model を生成し、その中の
Order_Details, Products テーブルを使っています。

環境は、Windows 10 Pro 64-bit, .NET 4.6.1, Entity Framework 6.2.0, Visual Studio
Community 2015 Update 3, SQL Server 2008 Express です。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;

namespace ConsoleAppJoinByLinq
{
    class Program
    {
        static void Main(string[] args)
        {
            NORTHWINDEntities context = new NORTHWINDEntities();

            var delivery = from d in context.Order_Details
                           group d by d.ProductID into g
                           orderby g.Key
                           select new
                           {
                               ItemCode = g.Key,
                               Count = g.Sum(x => x.Quantity),
                               SumAmount = g.Sum(x => x.UnitPrice * x.Quantity)
                           };

            var test = from p in context.Products
                       join d in delivery
                       on p.ProductID equals d.ItemCode into dGroup
                       from item in dGroup.DefaultIfEmpty()
                       select new
                       {
                           ItemCode = p.ProductID,
                           Name = p.ProductName,
                           Count = item.Count,
                           SumAmount = item.SumAmount
                       };

            foreach (var x in test)
            {
                Console.WriteLine($"ID: {x.ItemCode}, Name: {x.Name}, Count: {x.Count}, Sum: {x.SumAmount}");
            }
        }
    }
}

結果は:
ID: 1, Name: Chai, Count: 828, Sum: 14277.6000
ID: 2, Name: Chang, Count: 1057, Sum: 18559.2000
ID: 3, Name: Aniseed Syrup, Count: 328, Sum: 3080.0000
・・・中略・・・
ID: 77, Name: Original Frankfurter grune Sose, Count: 791, Sum: 9685.0000

返信 編集キー/


管理者用

- Child Tree -