Sil*_*ent 2 c# linq linqpad linq-to-sql
这个陈述有什么问题?当在LinqPad中运行语言设置为"C#Statement"时,我得到"; expect".
from p in Products where p.UnitPrice > 50 select new {p.ProductID };
Run Code Online (Sandbox Code Playgroud)
现在好像我将它分配给任何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
Run Code Online (Sandbox Code Playgroud)
编辑:这是我的不好实际上我不能运行第二个例子而不将其分配给变量.
LINQ查询表达式不是C#中的合法语句.您需要在有效语句中使用表达式.
例如,您可以将表达式用作赋值语句的右侧:
var expensiveProductIds = from p in Products
where p.UnitPrice > 50
select new { p.ProductID };
Run Code Online (Sandbox Code Playgroud)
在我看来,你似乎并不真正了解LINQ的全部内容.您对裸查询表达式的期望是什么?
编辑:看看Alex Moore关于如何在LINQPad中使用它的答案.
顺便说一下,如果你仍然想要坚持使用"C#Statement(s)"模式,这里有一种方法可以将查询结果写入控制台:
var expensiveProductIds = from p in Products
where p.UnitPrice > 50
select new { p.ProductID };
expensiveProductIds.Dump();
Run Code Online (Sandbox Code Playgroud)
如果您使用" C#Expression "作为LinqPad语言下拉菜单中的语言,则必须删除分号,因为它只是一个表达式:
from p in Products where p.UnitPrice > 50 select new {p.ProductID }
Run Code Online (Sandbox Code Playgroud)
如果您使用" C#Statement(s) "作为语言,则必须像常规C#代码一样编写它:
var x = (from p in Products where p.UnitPrice > 50 select new {p.ProductID });
Run Code Online (Sandbox Code Playgroud)
LINQPad允许您测试两种方式,因为当您将语句放在一边时,一些查询会更容易.