2016-09-07 13 views
-3

このコードに変換してLINQに変換し、データグリッドビューにプレビューすることはできません。SQLコードをLINQに変換 - グループ化および合計

私はthisの答えを見てきましたが、それはあなたが基本的に2つのテーブルを結合する必要が

+0

あなたは何をしようとしていますか? – tym32167

+2

自分で試してみて、試したことがうまくいかないものを元に戻してください... https://stackoverflow.com/questions/12238423/linqpad-convert-sql-to-linq-command –

+0

私は各顧客の購入をしたい数量は – user6805346

答えて

0

をLINQするためにこのコードを変換するために私を助けてください、私に

select tbl_user.id,tbl_user.name,tbl_user.family, sum(tbl_price.price) 
     from tbl_user,tbl_price 
     where tbl_user.id=tbl_price.user_id_fk 
     group by tbl_user.name+''+tbl_user.family,tbl_user.id,tbl_user.name,tbl_user.family 

を助けていない、でグループの結果をUserIdと ユーザーの各アイテムのPriceプロパティ値のSumメソッドを呼び出します。この

var usersWithTotalPrice = (from a in db.Users 
          join b in db.UserPrice on a.UserId equals b.UserId 
          select new { UserId = a.UserId, 
             FamilyName = a.Name + " " + a.FamilyName, 
             Price = b.Price} 
         ).GroupBy(f => f.UserId, items => items, (a, b) => new 
            { 
              UserId = a, 
              FamilyName = b.FirstOrDefault().FamilyName , 
              Price = b.Sum(g=>g.Price) 
            } 
         ).ToList(); 

usersWithTotalPrice変数のような

何かがUserIdFamilyNamePriceプロパティを持つ項目ごとの集合になります。私は匿名のプロジェクションを使いました。ビューモデルがあれば、それを使うことができます。

public class UserWithPrice 
{ 
    public int Id { set;get;} 
    public string FamilyName { set;get;} 
    public decimal Price { set;get;} 
} 

および突起部に

var usersWithTotalPrice = (from a in db.Users 
          join b in db.UserPrice on a.UserId equals b.UserId 
          select new { UserId = a.UserId, 
             FamilyName = a.Name + " " + a.FamilyName, 
             Price = b.Price} 
         ).GroupBy(f => f.UserId, items => items, (a, b) => 
            new UserWithPrice 
            { 
              Id = a, 
              FamilyName = b.FirstOrDefault().FamilyName , 
              Price = b.Sum(g=>g.Price) 
            } 
         ).ToList(); 

は、あなたの定義に基づいて、あなたのエンティティ/ Dbset /プロパティ名を更新することを使用します。

+0

ありがとうございます。正解は – user6805346

0

これにはlinqを使用する必要はありません。実際には、datatableを使用して、そのdatatableにgridviewのデータソースを設定することができます。

public void LoadData() 
     { 
      DataTable dt = new DataTable(); 
      using (var conn = new SqlConnection("your connection string here")) 
      { 
       using (var cmd = conn.CreateCommand()) 
       { 
        conn.Open(); 

        //set the command up as a select 
        cmd.CommandText = "select tbl_user.id,tbl_user.name,tbl_user.family, sum(tbl_price.price) "+ 
        "from tbl_user, tbl_price " + 
        "where tbl_user.id = tbl_price.user_id_fk " + 
        "group by tbl_user.name + '' + tbl_user.family,tbl_user.id,tbl_user.name,tbl_user.family"; 

        using (SqlDataAdapter a = new SqlDataAdapter(cmd)) 
        { 
         a.Fill(dt); 
        } 

        //set the datasource of the gridview to the loaded table. The gridview will now display the data of your select statement. 
        dgvActivity.DataSource = dt; 

       } 
      } 
     } 
関連する問題