如何通过linq或datatable.compute以任何方式从每个组中的数据表中选择不同的行 [英] How to select distinct rows from data table in every group by any way linq or datatable.compute

查看:87
本文介绍了如何通过linq或datatable.compute以任何方式从每个组中的数据表中选择不同的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问题


我需要从每个组的sum distinct行返回一个值。


会员表

会员代码种类价格
006625/1 1 108
006625/2 1 108
006625/3 1 108
006625 / 4 2 50
006625/5 2 50

我需要返还158作为总和 


我需要这样做通过使用datatable.compute或linq 


实际上我需要查询基于mskind的价格的返回总和而不是重复 


意味着从中获取一个值每个组 

 int sumMember = DT.Compute(); 

int SumMember = LINQ

我不知道如何使用Compute或Linq获取 价格总和,所以我问?


对于006625以上的会员资格我有两种1和2


如何从每一行得到每一行的总和DT数据表中的


我已存储会员表 


我在数据表中有3列 


MemberCode,Kind,Price 


如何根据种类仅返回不同行的总和?





解决方案

查看示例:

 var dt = new DataTable(); 
dt.Columns.Add(" MemberCode",typeof(string));
dt.Columns.Add(" Kind",typeof(int));
dt.Columns.Add(" Price",typeof(decimal));
dt.Rows.Add(" 006625/1",1,108);
dt.Rows.Add(" 006625/2" 1,110);
dt.Rows.Add(" 006625/3",1,108);
dt.Rows.Add(" 006625/4",2,50);
dt.Rows.Add(" 006625/5",2,50);
dt.Rows.Add(" 006627/1",1,333);
dt.Rows.Add(" 006627/2",1,333);
dt.Rows.Add(" 006627/3",2,444);
dt.Rows.Add(" 006629/1" 1,1000);

var query =
dt
.AsEnumerable()
.Select(r => new {c = Regex.Match(r.Field< string>( "MemberCode"),"^。+?(?= /)"。)。值,r})
.GroupBy(p => new {pc,k = prField< int>(" ; Kind")},(k,g)=> g.First())
.GroupBy(p => pc,(k,g)=> new {Code = k,Sum = g .Sum(z => zrField< decimal>(" Price"))});

var array = query.ToArray();




Problem

I need to return one value from sum distinct row from every group .

Member Table

MemberCode    Kind      Price
006625/1       1          108
006625/2       1          108
006625/3       1          108
006625/4       2          50
006625/5       2          50

I need to return 158 as sum 

i need to do that by using datatable.compute or linq 

Actually i need query return sum of price based on mskind and not repeated 

meaning take one value from every group 

int sumMember=DT.Compute();
or 
int SumMember=LINQ

i Dont know how to use Compute or Linq to get  sum of Price so that I ask ?

for membership above 006625 i have two kind 1 and 2

how to get sum every single row from every group

in DT data table i store already Member Table 

and i have 3 column inside datatable 

MemberCode,Kind,Price 

How to return only sum for distinct row based on kind?


解决方案

Check an example:

var dt = new DataTable();
dt.Columns.Add( "MemberCode", typeof( string ) );
dt.Columns.Add( "Kind", typeof( int ) );
dt.Columns.Add( "Price", typeof( decimal ) );
dt.Rows.Add( "006625/1", 1, 108 );
dt.Rows.Add( "006625/2", 1, 108 );
dt.Rows.Add( "006625/3", 1, 108 );
dt.Rows.Add( "006625/4", 2, 50 );
dt.Rows.Add( "006625/5", 2, 50 );
dt.Rows.Add( "006627/1", 1, 333 );
dt.Rows.Add( "006627/2", 1, 333 );
dt.Rows.Add( "006627/3", 2, 444 );
dt.Rows.Add( "006629/1", 1, 1000 );

var query =
    dt
        .AsEnumerable()
        .Select( r => new { c = Regex.Match( r.Field<string>( "MemberCode" ), "^.+?(?=/)" ).Value, r } )
        .GroupBy( p => new { p.c, k = p.r.Field<int>( "Kind" ) }, ( k, g ) => g.First() )
        .GroupBy( p => p.c, ( k, g ) => new { Code = k, Sum = g.Sum( z => z.r.Field<decimal>( "Price" ) ) } );

var array = query.ToArray();



这篇关于如何通过linq或datatable.compute以任何方式从每个组中的数据表中选择不同的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆