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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.90109 の関連記事表示

<< 0 >>
■90109  Re[3]: LINQでJOIN時のエラーについて
□投稿者/ WebSurfer -(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
記事No.90105 のレス /過去ログ155より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -