以下这个声明有什么问题?当我在LinqPad中运行语言设置为“C#Statement”时,我得到“;预期”。
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
编辑:实际上我很糟糕,如果不将其分配给变量,我就无法运行第二个示例。
答案 0 :(得分:8)
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();
答案 1 :(得分:6)
如果您使用“ 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允许您测试两种方式,因为当您将语句放在一边时,一些查询会更容易。
答案 2 :(得分:1)
var db = new DataContext();
var product= from p in db.Products
where p.UnitPrice > 50
select new{ProductId = p.ProductID };
答案 3 :(得分:0)
对我来说唯一看起来很奇怪的是,在你的新匿名对象中,你没有将ProductID分配给一个属性,但我想这并不是真的需要(我只是尝试过它)。
from p in Products where p.UnitPrice > 50 select new { ProductID = p.ProductID };
编辑:由于评论,我意识到这不会为解决OP的问题提供任何有用的东西。
答案 4 :(得分:0)
尝试将结果分配给变量。
var v = from p in Products where p.UnitPrice > 50 select new {p.ProductID };
答案 5 :(得分:0)
您的代码不是有效的C#语句。
将表达式的值赋给变量:
var q = from p in ... ;
或者删除末尾的分号并将语言更改为 C#Expression
答案 6 :(得分:0)
您需要将其分配给某些内容。
var productIds = from p in Products where p.UnitPrice > 50 select new {p.ProductID };
答案 7 :(得分:-2)
你试图在分配之后选择。所以你应该使用像这样的东西
from p in Products where p.UnitPrice > 50 select
new {
ProductID = p.ProductID
};