[英]getting result from LiNQ query
我是使用LiNQ的新手。 我有以下代码,用于查找发票对象上零件的订购数量。
var invoiceQty = from i in returnInvoices
where i.PartNo == returnPart.PartNo && i.InvoiceID == hiddenInvoiceId.Value
select i.OrderLineQty;
if (Convert.ToInt32(txtReturnProdQty.Text) > Convert.ToInt32(invoiceQty))
{
args.IsValid = false;
SourceValidate.ErrorMessage = "Returned qty cannot be greater than quantity available on the invoice.";
txtReturnProdQty.Focus();
return;
}
我认为我无法正确获取if语句的OrderLineQty
值,因为它会产生以下错误:
System.InvalidCastException: Unable to cast object of type 'WhereSelectListIterator`2[Invoice,System.Double]' to type 'System.IConvertible'.
谁能帮助我了解如何在LiNQ查询中使用返回值?
LiNQ需要一段时间才能下沉!
直到“使用”,才会评估linq表达式。
这意味着调用invoiceQty.ToList()或.First()
在此之前,invoiceQty类型是“表达式”,而不是有效类型。 要获得总数量,您需要:
invoiceQty.Sum()
或简单地替换查询:
var invoiceQty = (from i in returnInvoices
where i.PartNo == returnPart.PartNo && i.InvoiceID == hiddenInvoiceId.Value
select i.OrderLineQty).Sum();
这是因为您要返回IEnumerable<T>
,如果OrderLineQty
是int,则invoiceQty的类型是IEnumerable<int>
。
当您进行比较时,这是没有意义的。
如果只期望一个结果,则在此处使用.Single()
如果您熟悉,Linq就像一个SQL查询。 在您的代码中,invoiceQty将包含满足您的where子句中的搜索条件的i.OrderLineQty的LIST(更具体地说是IQueryable)。 即使只有一个匹配项,它仍然会为您提供一个元素列表。
您可能会确定只有一个匹配(并且where子句似乎支持该假设),因此,如果您遇到这种情况,可以请求Single,First,SingleOrDefault或FirstOrDefault( 单击此处以获取可用方法的完整列表)
if (Convert.ToInt32(txtReturnProdQty.Text) > Convert.ToInt32(invoiceQty.First()))
尝试这种方式:
if (invoiceQty.FirstOrDefault() != null) return;
if (Convert.ToInt32(txtReturnProdQty.Text) > (decimal)invoiceQty.First())
{
args.IsValid = false;
SourceValidate.ErrorMessage = "Returned qty cannot be greater than quantity available on the invoice.";
txtReturnProdQty.Focus();
return;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.