以下声明有什么问题

时间:2011-11-04 15:02:51

标签: c# linq linq-to-sql linqpad

以下这个声明有什么问题?当我在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

编辑:实际上我很糟糕,如果不将其分配给变量,我就无法运行第二个示例。

8 个答案:

答案 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 
                                                    };