Как создать «глобальную» переменную для возврата результата linq? - PullRequest
0 голосов
/ 13 декабря 2018

Допустим, у меня есть выпадающий список на мой взгляд.Различные варианты будут использовать другой результат 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;
    }

Ответы [ 4 ]

0 голосов
/ 13 декабря 2018

Если вам не нужно ничего делать с переменной после блока переключателей, я бы просто вернулся изнутри блока переключателей, например,

switch (Linq)
    {                
        case "Most Expensive":
            return from Products in northwindEntities.Products
                        ...
        case "Above Average":
            return from Products in northwindEntities.Products
                        ....
    }
return null;

В противном случае вы должны определить тип при объявлениипеременная, если компилятор не может определить тип из присваивания.

Возможно, вы захотите использовать List | IEnumerable | IEnumberable или определить тип результата.

0 голосов
/ 13 декабря 2018

К сожалению, вы не можете.Есть несколько вариантов.Либо используйте dynamic, либо верните объект.например.например, IEnumerable<object>, IList<object>.Или вы можете создать модель продукта с ProductName и UnitPrice как poco.

Редактировать:

Эта модель взломана, но ее можно использовать.

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);
0 голосов
/ 13 декабря 2018

Вы можете объявить пользовательский тип для использования вместо анонимного:

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 };
0 голосов
/ 13 декабря 2018

Если это действительно все ваше действие, то вам не нужно.Просто замените LinqResult = на return.

Но если вам действительно нужно выяснить тип, я обычно временно объявляю переменную, в которой я его установил:

var LinqResult = from ...

Затем в Visual Studio наведите курсор на имя переменной, и он скажет мне тип.Затем я изменяю код и объявляю переменную с типом.

В этом конкретном случае это в конечном итоге будет IEnumerable анонимного типа, который, я не думаю, вы можете объявить впо крайней мере, не прямым путем.Здесь обсуждается .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...