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

わんくま同盟

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

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

■90105 / 親階層)  LINQでJOIN時のエラーについて
□投稿者/ レイ (1回)-(2019/02/08(Fri) 23:33:10)

分類:[C#] 

2019/02/09(Sat) 00:24:35 編集(投稿者)
いつもお世話になっています。

DBから抽出したデータと、加工用にDataTableにセットしたデータを
JOINしたときに、エラーが出たので質問させてください。

まず、DBからマスタを取得し格納するクラスがあります。
このマスタクラスと、データをjoinして、
結果を取得したいのですが、思い通りになりません。

例えば
class Shohin
{
    public Shohin(string code, string name)
    {
        this.code = code;
        this.name = name;
    }

    public string code { get; set; }  // 商品コード
    public string name { get; set; }  // 名前
}

があり、このクラスを経由し、var shohinにデータを取得します。

また、出庫テーブルもDBにあり、これもDBより取得します。
class Delivery
{
    public Delivery(string no, string deliverydt, string itemcode)
    {
        this.no = no;
        this.deliverydt = deliverydt;
        this.itemcode = itemcode
    }

    public string no { get; set; }  // 出庫番号
    public string deliverydt { get; set; }  // 出庫日
    public decimal itemcode { get; set; }  // 商品コード
    public decimal deliveryCount { get; set; }  // 出庫数}
var dtdelivery

この後、出庫データに出庫日当時の価格を価格マスタから取得しながら、
DataTableに追加します。
    DataTable dtdelivery = new DataTable("dtdelivery");
    DataRow dr = dtdelivery.NewRow();
    foreach (var prop in propsdtdelivery)
    {
        if (prop.GetMethod.IsVirtual != true)
        {
            dr[prop.Name] = prop.GetValue(l) ?? DBNull.Value;  // 単価項目も追加します。また、出庫数*単価で金額項目も追加します。
        }
    }
    dtdelivery.Rows.Add(dr);
 
その後、出庫データテーブルの件数をカウントし、金額をサマリーします。
var deliverycontext = dtdelivery.AsEnumerable()
    .GroupBy(x => x.Field<string>("ItemCode")).Select(x => new
    {
        ItemCode = x.Key,
        Count = x.Sum(y => y.Field<decimal>("Count")),    // 出庫データ件数
        SumAmount = x.Sum(y => y.Field<decimal>("SumAmount"))     // 出庫金額合計
    });

deliverycontextの結果ビューには、値がセットされています。

ここで質問ですが、shohinとdeliverycontextをjoinしたいのですが、
エラーになってしまいます。

var test = from a in shohin
                  join b in deliverycontext on a.ItemCode equals b.ItemCode into A
                  from x in A.DefaultIfEmpty()
                  select new
                  {
                      ItemCode = x.ItemCode,
                      Count = (x != null) ? x.Count : 0,
                      SumAmount = (x != null) ? y.SumAmount : 0
                  };
エラー内容:
型 '匿名型' の定数値を作成できません。このコンテキストでサポートされるのはプリミティブ型または列挙型だけです。

何が原因なのか、ご教授の程よろしくお願い致します。

編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
親記事 →Re[1]: LINQでJOIN時のエラーについて /WebSurfer
 
上記関連ツリー

LINQでJOIN時のエラーについて / レイ (19/02/08(Fri) 23:33) #90105 ←Now
Re[1]: LINQでJOIN時のエラーについて / WebSurfer (19/02/08(Fri) 23:43) #90106
  └ Re[2]: LINQでJOIN時のエラーについて / レイ (19/02/09(Sat) 00:27) #90107
    ├ Re[3]: LINQでJOIN時のエラーについて / WebSurfer (19/02/09(Sat) 09:06) #90108
    └ Re[3]: LINQでJOIN時のエラーについて / WebSurfer (19/02/09(Sat) 11:54) #90109
      └ Re[4]: LINQでJOIN時のエラーについて / レイ (19/02/09(Sat) 14:40) #90111
        ├ Re[5]: LINQでJOIN時のエラーについて / WebSurfer (19/02/09(Sat) 14:40) #90112
        └ Re[5]: LINQでJOIN時のエラーについて / WebSurfer (19/02/09(Sat) 15:08) #90113
          └ Re[6]: LINQでJOIN時のエラーについて / レイ (19/02/09(Sat) 20:52) #90114
            ├ Re[7]: LINQでJOIN時のエラーについて / WebSurfer (19/02/09(Sat) 22:48) #90115
            └ Re[7]: LINQでJOIN時のエラーについて / WebSurfer (19/02/10(Sun) 10:20) #90120
              └ Re[8]: LINQでJOIN時のエラーについて / レイ (19/02/10(Sun) 19:30) #90124
                └ Re[9]: LINQでJOIN時のエラーについて / レイ (19/02/15(Fri) 22:22) #90194 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信