猿问

如何创建一个“全局”变量来返回 linq 结果?

假设我的视图中有一个下拉列表。不同的选择将使用不同的 linq 结果,需要返回视图。


我已经完成了查看页面。现在在我的控制器上,我有点卡住了。我知道 var 不能用作“全局”变量声明。但那我该怎么办呢?


这是我的代码:


[HttpPost]

    public ActionResult About(string Linq)

    {

        IEnumerable<NorthwindResult> Linq1;


        switch (Linq)

        {                

            case "Most Expensive":

                Linq1 = from Products in northwindEntities.Products

                            where

                              Products.UnitPrice ==

                                (from Products0 in northwindEntities.Products

                                 select new

                                 {

                                     Products0.UnitPrice

                                 }).Max(p => p.UnitPrice)

                            select new NorthwindResult

                            {

                                ProductName = Products.ProductName,

                                UnitPrice = Products.UnitPrice

                            };


                break;

            case "Above Average":

                Linq1 = from Products in northwindEntities.Products

                            where

                              Products.UnitPrice >

                                (from Products0 in northwindEntities.Products

                                 select new

                                 {

                                     Products0.UnitPrice

                                 }).Average(p => p.UnitPrice)

                            orderby Products.UnitPrice descending

                            select new NorthwindResult

                            {

                                ProductName = Products.ProductName,

                                UnitPrice = Products.UnitPrice

                            };

                break;

            default:

                break;

        }

        return Linq1;

    }

C#

林克

模型视图控制器


Cats萌萌
浏览 138回答 3
3回答

繁华开满天机

不幸的是,你不能。有多种选择。使用dynamic或返回一个对象。例如。例如IEnumerable<object>,IList<object>。或者,您可以使用 ProductName 和 UnitPrice 作为 poco 创建一个 Product 模型。编辑:这个很hacky,但可以使用。void GetObject<T>(object anonymousObject, T cast){&nbsp; &nbsp;return (T) anonymousObject;}在您的模型上,您可以这样调用:object linqResult;// retrieve linqResult data;....var obj = GetObject(linqResult, new&nbsp; { ProductName = "Honda", UnitPrice = 20.0 };This variable can be accessed as&nbsp;Console.WriteLine(obj.ProductName);

ABOUTYOU

您可以声明要使用的自定义类型而不是匿名类型:public class ProductPrice{&nbsp; &nbsp; public string Name { get; set; }&nbsp; &nbsp; public decimal Price { get;&nbsp; set; }}然后LinqResult声明为IEnumarable<ProductPrice> LinqResult;你把它select改成select new ProductPrice { Name = Products.Product name,&nbsp; Price = Products.UnitPrice };

牧羊人nacy

如果这真的是你的全部行动,那么你就不需要这样做。只需将 替换LinqResult =为return。但是如果你真的需要弄清楚类型,我通常会临时声明我设置它的变量:var&nbsp;LinqResult&nbsp;=&nbsp;from&nbsp;...然后,在 Visual Studio 中,将光标悬停在变量名上,它会告诉我类型。然后我更改代码并使用类型声明变量。在这种特定情况下,它将最终成为IEnumerable匿名类型,我认为您实际上无法声明,至少不能以直接的方式声明。这里有一些关于它的讨论。
随时随地看视频慕课网APP
我要回答