为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
Cats萌萌 2022-06-12 14:36:57
假设我的视图中有一个下拉列表。不同的选择将使用不同的 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#林克模型视图控制器
查看完整描述

3 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

不幸的是,你不能。有多种选择。使用dynamic或返回一个对象。例如。例如IEnumerable<object>,IList<object>。或者,您可以使用 ProductName 和 UnitPrice 作为 poco 创建一个 Product 模型。


编辑:


这个很hacky,但可以使用。


void GetObject<T>(object anonymousObject, T cast)

{

   return (T) anonymousObject;

}

在您的模型上,您可以这样调用:


object linqResult;

// retrieve linqResult data;

....

var obj = GetObject(linqResult, new  { ProductName = "Honda", UnitPrice = 20.0 };


This variable can be accessed as 

Console.WriteLine(obj.ProductName);


查看完整回答
反对 回复 2022-06-12
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

您可以声明要使用的自定义类型而不是匿名类型:


public class ProductPrice

{

    public string Name { get; set; }

    public decimal Price { get;  set; }

}

然后LinqResult声明为


IEnumarable<ProductPrice> LinqResult;

你把它select改成


select new ProductPrice { Name = Products.Product name,  Price = Products.UnitPrice };



查看完整回答
反对 回复 2022-06-12
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

如果这真的是你的全部行动,那么你就不需要这样做。只需将 替换LinqResult =return

但是如果你真的需要弄清楚类型,我通常会临时声明我设置它的变量:

var LinqResult = from ...

然后,在 Visual Studio 中,将光标悬停在变量名上,它会告诉我类型。然后我更改代码并使用类型声明变量。

在这种特定情况下,它将最终成为IEnumerable匿名类型,我认为您实际上无法声明,至少不能以直接的方式声明。这里有一些关于它的讨论。


查看完整回答
反对 回复 2022-06-12
  • 3 回答
  • 0 关注
  • 137 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信