[英]What is wrong with this statement below
这个陈述有什么问题? 当在LinqPad中运行语言设置为“C#Statement”时,我得到“; expect”。
from p in Products where p.UnitPrice > 50 select new {p.ProductID };
现在好像我将它分配给任何var; 我没有得到任何错误。 但我觉得令人困惑的是下面的声明工作正常并给我结果,虽然我没有将它分配给任何变量。 有任何想法吗?
from p in Products
let spanishOrders = p.OrderDetails.Where ( o=> o.Order.ShipCountry == "Spain")
where spanishOrders.Any()
group new
{
p.ProductName,
Orders = spanishOrders.Count(),
spanishOrders
}
by p.Category.CategoryName
编辑:这是我的不好实际上我不能运行第二个例子而不将其分配给变量。
LINQ查询表达式不是C#中的合法语句。 您需要在有效语句中使用表达式。
例如,您可以将表达式用作赋值语句的右侧:
var expensiveProductIds = from p in Products
where p.UnitPrice > 50
select new { p.ProductID };
在我看来,你似乎并不真正了解LINQ的全部内容。 您对裸查询表达式的期望是什么?
编辑 :看看Alex Moore关于如何在LINQPad中使用它的答案。
顺便说一下,如果你仍然想要坚持使用“C#Statement(s)”模式,这里有一种方法可以将查询结果写入控制台:
var expensiveProductIds = from p in Products
where p.UnitPrice > 50
select new { p.ProductID };
expensiveProductIds.Dump();
如果您使用“ C#Expression ”作为LinqPad语言下拉菜单中的语言,则必须删除分号,因为它只是一个表达式:
from p in Products where p.UnitPrice > 50 select new {p.ProductID }
如果您使用“ C#Statement(s) ”作为语言,则必须像常规C#代码一样编写它:
var x = (from p in Products where p.UnitPrice > 50 select new {p.ProductID });
LINQPad允许您测试两种方式,因为当您将语句放在一边时,一些查询会更容易。
var db = new DataContext();
var product= from p in db.Products
where p.UnitPrice > 50
select new{ProductId = p.ProductID };
对我来说唯一看起来很奇怪的是,在你的新匿名对象中,你没有将ProductID分配给属性,但我想这并不是真正需要的(我只是尝试过)。
from p in Products where p.UnitPrice > 50 select new { ProductID = p.ProductID };
编辑 :由于评论,我意识到这不会提供任何有用的解决OP的问题。
尝试将结果分配给变量。
var v = from p in Products where p.UnitPrice > 50 select new {p.ProductID };
您的代码不是有效的C#语句。
将表达式的值赋给变量:
var q = from p in ... ;
或者删除末尾的分号并将语言更改为C#表达式
你需要将它分配给某些东西。
var productIds = from p in Products where p.UnitPrice > 50 select new {p.ProductID };
你试图在分配之后选择。 所以你应该使用这样的东西
from p in Products where p.UnitPrice > 50 select
new {
ProductID = p.ProductID
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.