繁体   English   中英

以下声明有什么问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM