使用linq对数据表中的行进行分组
本文关键字:linq 数据表 使用 | 更新日期: 2023-09-27 18:10:07
[WebMethod(EnableSession=true)]
public static void ShortFall(List<Dictionary<string, string>> Data)
{
List<dynamic> RetData = new List<dynamic>();
DataTable dtstock = new DataTable();
DBHelper.DBhelpercls db = new DBHelper.DBhelpercls();
List<dynamic> ShortfallTempArray = new List<dynamic>();
List<dynamic> ShortfallTempArray2 = new List<dynamic>();
List<dynamic> ShortfallArray = new List<dynamic>();
foreach (Dictionary<string, string> EachItems in Data)
{
dtstock = db.GetTable("SELECT ISNULL(Qty,0) AS Stock_Qnty FROM TBLActualStock WHERE ItemCode='" + EachItems["ItemCode"].ToString() + "' AND Mode=1");
if (dtstock.Rows.Count == 0)
{
ShortfallTempArray.Add(new { ItemCode = EachItems["ItemCode"].ToString(), ItemDesc = EachItems["ItemDesc"].ToString(), Qty =EachItems["Qty"].ToString(), Uom = EachItems["Unit"].ToString() });
}
else if (((Convert.ToSingle(dtstock.Rows[0]["Stock_Qnty"].ToString()) - Convert.ToSingle(EachItems["Qty"].ToString())) <= 0))
{
ShortfallTempArray.Add(new { ItemCode = EachItems["ItemCode"].ToString(), ItemDesc = EachItems["ItemDesc"].ToString(), Qty = (Convert.ToSingle(dtstock.Rows[0]["Stock_Qnty"].ToString()) - Convert.ToSingle(EachItems["Qty"].ToString())).ToString(), Uom = EachItems["Unit"].ToString() });
}
}
var summary = from p in ShortfallTempArray
let k = new
{
ItemCode = p.ItemCode,
ItemDesc = p.ItemDesc,
Uom = p.Uom
}
group p by k into t
select new
{
ItemCode = t.Key.ItemCode,
ItemDesc = t.Key.ItemDesc,
Uom = t.Key.Uom,
Qty = t.Sum(p => Convert.ToInt32(p.Qty))
};
foreach (var row in summary)
{
ShortfallTempArray2.Add(new { ItemCode = row.ItemCode, ItemDesc = row.ItemDesc, Qty = row.Qty.ToString(), Uom=row.Uom });
}
HttpContext.Current.Session["Short"] = ShortfallTempArray2;
}
在上面的代码中,当Qty是一个整数时,它可以正常工作;但如果是浮点数或小数,下面一行就会出现错误。
Qty = t.Sum(p => Convert.ToInt32(p.Qty))
我只是将Convert.ToInt32
更改为Convert.ToDouble
,然后出现以下错误....
不能隐式地将'double'类型转换为'int'类型。一个显式的存在转换(您是否缺少强制类型转换?)
可能错误是Qty数据类型,因为它应该是整数类型。
你可能正在尝试:
(int) = (double)
你应该这样做:
Qty = (int)t.Sum(p => Convert.ToDouble(p.Qty));
或者将Qty的类型更改为double