#c# #linq
#c# #linq
Вопрос:
[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 = t.Sum(p => Convert.ToInt32(p.Qty))
Я просто меняю Convert.ToInt32
Convert.ToDouble
, после чего появляется следующая ошибка….
Невозможно неявно преобразовать тип ‘double’ в ‘int’. Существует явное преобразование (вам не хватает приведения?)
Комментарии:
1. Что такое тип данных p.Qty?
2. Ваш код отлично работает для меня для всех комбинаций
Qty
того, чтобы бытьint
ordouble
, аConvert
вызов —Convert.ToInt32
orConvert.ToDouble
.3. Зачем вам вообще нужно приведение? Ошибка, которую вы показываете, на самом деле не соответствует коду. Вы действительно пытаетесь спроецировать на известный тип, где
Qty
anint
?4. Теперь я помещаю туда весь свой код. Пожалуйста, просмотрите это.
5. @JeffMercado Пожалуйста, проверьте весь мой код
Ответ №1:
вероятно, ошибка относится к типу данных Qty, поскольку она должна быть целочисленного типа.
Ответ №2:
вы, вероятно, пытаетесь сделать:
(int)=(double)
вы должны сделать:
Qty = (int)t.Sum(p => Convert.ToDouble(p.Qty));
Или измените тип кол-во на double
Комментарии:
1. Тем не менее ошибка существует. В моей базе данных тип данных Qty — float