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

わんくま同盟

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

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


(過去ログ 155 を表示中)
■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
                  };
エラー内容:
型 '匿名型' の定数値を作成できません。このコンテキストでサポートされるのはプリミティブ型または列挙型だけです。

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

返信 編集キー/


管理者用

- Child Tree -