请针对我的要求提出linq查询
任何人都可以针对以下要求提出linq查询 表单上有一个复选框..当我们点击它时..根据下面的数据表,它必须根据请针对我的要求提出linq查询,linq,Linq,任何人都可以针对以下要求提出linq查询 表单上有一个复选框..当我们点击它时..根据下面的数据表,它必须根据项目代码,总和(SoldQty),库存和,最新销售记录值,金额,说明进行分组 你不能分组。以下列 solddate-显示最新的销售日期 部门 类别 一般查询 var resQuery = from i in someQueryable group i by new {i.groupProperty1, i.groupProperty2} into g
项目代码
,总和(SoldQty)
,库存和
,最新销售记录值
,金额
,说明
进行分组
你不能分组。以下列
solddate
-显示最新的销售日期部门
类别
一般查询
var resQuery = from i in someQueryable
group i by new {i.groupProperty1, i.groupProperty2} into g
select new
{
Property1 = g.Key.Property1,
Property2 = g.Key.Property2
Total = g.Sum(p => p.SumProperty),
/// other properties
};
对于您的示例数据,它可能类似于:
var resQuery = from i in dbContext.Items
group i by new{ i.ItemCode, i.Description, i.UOM} into g
select new
{
ItemCode = g.Key.ItemCode,
TotalSold = g.Sum(p => p.SoldQty),
Description = g.Key.Description,
UOM =g.Key.UOM
/// other properties
};
在Ideone上尝试以下示例:
类似的问题被问了很多次:
decimal? SoldQty, stockinhand,SellPrice,Amount,CostPrice;
string ItemCode, Description,UOM,BarCode,SoldDate,Department,Category,User;
var resQuery = from row in dtFilter.AsEnumerable()
group row by row.Field<string>("Item Code") into g
select dtFilter.LoadDataRow(new object[]
{
ItemCode=g.Key,
Description=g.Select(r=>r.Field<string>("Description")).First<string>(),
UOM=g.Select(r=>r.Field<string>("UOM")).First<string>(),
SoldQty = g.Sum(r => r.Field<decimal?>("Sold Qty")).Value,
stockinhand=g.Select(r=>r.Field<decimal?>("Stock in Hand")).First<decimal?>(),
SellPrice=g.Select(r=>r.Field<decimal?>("Sell Price")).First<decimal?>(),
Amount = g.Sum(r => r.Field<decimal?>("Amount")).Value,
CostPrice = g.Sum(r => r.Field<decimal?>("Cost Price")).Value,
BarCode=g.Select(r=>r.Field<string>("Barcode")).First<string>(),
SoldDate=g.Select(r=>r.Field<string>("SoldDate")).Last<string>(),
Department=g.Select(r=>r.Field<string>("Department")).First<string>(),
Category=g.Select(r=>r.Field<string>("Category")).First<string>(),
User=g.Select(r=>r.Field<string>("User")).First<string>(), }, false);
decimal?解决数量、库存、售价、金额、成本价;
字符串项编码、说明、计量单位、条形码、数据表、部门、类别、用户;
var resQuery=来自dtFilter.AsEnumerable()中的行
按行将字段(“项目代码”)分组为g
选择dtFilter.LoadDataRow(新对象[])
{
ItemCode=g.Key,
Description=g.Select(r=>r.Field(“Description”)).First(),
UOM=g.选择(r=>r.字段(“UOM”)).First(),
SoldQty=g.Sum(r=>r.Field(“售出数量”)。值,
stockinhand=g.Select(r=>r.Field(“库存”)).First(),
SellPrice=g.Select(r=>r.Field(“售价”)).First(),
金额=g.总和(r=>r.字段(“金额”)。值,
CostPrice=g.Sum(r=>r.Field(“成本价格”))。值,
条形码=g.选择(r=>r.字段(“条形码”)).First(),
SoldDate=g.Select(r=>r.Field(“SoldDate”)).Last(),
Department=g.Select(r=>r.Field(“Department”).First(),
Category=g.Select(r=>r.Field(“Category”).First(),
User=g.Select(r=>r.Field(“User”)).First(),},false);
要获得更清晰的数据,请点击此链接。您好,谢谢您的回复。它正在部分工作。。。如何获取其他字符串列,如Description、UOM等,方法与获取ItemCode
(建议这些是Item
的属性)的方法相同,如在我的更新答案中。执行查询时(例如,resQuery.ToList()
),它将返回匿名对象的List
(由编译器生成)使用您指定的属性。您好,Mipe34,我几乎完成了。唯一的错误是,当我对Soldqty进行求和时,它会执行两次。我的意思是,如果ItemCode Soldqty 100 2 100 1,那么求和应该是3。但我得到了6。除此之外,没有问题,谢谢。我已经为您创建了关于Ideone的工作示例:并在我的示例中更正了语法回答。附言。你不需要感谢我,只要在我的回答对你有帮助的情况下将其标记为已回答;-)嗨…Sum(SoldQty)和Sum(Amount)的第一行数据增加了一倍,而对于其他行,则是好的。你不应该将问题的扩展部分作为答案。请使用此答案中的代码扩展您的问题,然后删除此帖子。
decimal? SoldQty, stockinhand,SellPrice,Amount,CostPrice;
string ItemCode, Description,UOM,BarCode,SoldDate,Department,Category,User;
var resQuery = from row in dtFilter.AsEnumerable()
group row by row.Field<string>("Item Code") into g
select dtFilter.LoadDataRow(new object[]
{
ItemCode=g.Key,
Description=g.Select(r=>r.Field<string>("Description")).First<string>(),
UOM=g.Select(r=>r.Field<string>("UOM")).First<string>(),
SoldQty = g.Sum(r => r.Field<decimal?>("Sold Qty")).Value,
stockinhand=g.Select(r=>r.Field<decimal?>("Stock in Hand")).First<decimal?>(),
SellPrice=g.Select(r=>r.Field<decimal?>("Sell Price")).First<decimal?>(),
Amount = g.Sum(r => r.Field<decimal?>("Amount")).Value,
CostPrice = g.Sum(r => r.Field<decimal?>("Cost Price")).Value,
BarCode=g.Select(r=>r.Field<string>("Barcode")).First<string>(),
SoldDate=g.Select(r=>r.Field<string>("SoldDate")).Last<string>(),
Department=g.Select(r=>r.Field<string>("Department")).First<string>(),
Category=g.Select(r=>r.Field<string>("Category")).First<string>(),
User=g.Select(r=>r.Field<string>("User")).First<string>(), }, false);