Abdalla Ben Omran Ответов: 2

Как я могу использовать LINQ anonymous в методе и распечатать его на consol?


Я использую приложение Consol, пишущее метод, который должен дать мне точно такой же результат этого запроса в sql server :

 select  PrinterName , Count(PrinterName) as TotalCount
from PrintQueue where MONTH(AddedToQueue) = 6 and YEAR (AddedToQueue)=2019
group by PrinterName
order by TotalCount desc

запрос дает мне 38 строк с PrintName и TotalCount . отлично

в C# я укладываю в конце с возвратом
я однажды определил этот метод так :
public static List<Queue> GetMostPrintedName(List<Queue> input)


и я бросаю вызов этому методу однажды, как :
public static string GetMostPrintedName(List<Queue> input)


когда я дебютирую, я получаю правильные значения, как я хочу, но моя проблема в том, как написать это в приложении Consol и увидеть 38 строк на Consol .

пожалуйста, посмотрите, что я пробовал :

Что я уже пробовал:

public static List<Queue> GetMostPrintedName(List<Queue> input)
        {
            var result =
            from print in input
            where print.AddedToQueue.Year == 2019 && print.AddedToQueue.Month == 6
            group print by print.PrinterName into PrinterNameGroup
            select new
            {
                PrinterName = PrinterNameGroup.Key,
                Getcount = PrinterNameGroup.Count(),
            };
            foreach (var item in result)
            {

            }
            return result;
        }

2 Ответов

Рейтинг:
16

OriginalGriff

Попробуй:

foreach (var item in result)
    {
    Console.WriteLine($"{item.Getcount}: {item.PrinterName}");
    }


[no name]

Он работает нормально но все еще проблема с возвращаемым типом

публичный статический список<очереди&ГТ; GetMostPrintedName(список<очереди&ГТ; вход)
возвращаемый ввод затем дайте мне все результаты которые составляют около 8000 какой тип возврата он может быть здесь

OriginalGriff

Ну да.
Это не список, это IEnumerable - просто наведите курсор мыши на объявление имени переменной в нем, и вы точно узнаете, что это такое.
Вы можете преобразовать его в список, добавив .Список():

возвращаемый результат.Список();

Но это также не коллекция элементов очереди (что бы это ни было) - это анонимный класс, поэтому вы все равно не можете вернуть его, поскольку вы не "знаете имя класса" для своего определения метода.
Я бы предложил вам либо выбрать элемент печати в вашем Linq, либо создать новый класс, который вы можете вернуть (который содержит элемент очереди и счетчик), и вернуть его.

[no name]

О да, я тебя поймал . спасибо, пол.
я попробовал использовать метод void и просто распечатал весь список, как вы дали мне для решения, но с новым классом я попробую его . звуки-это хорошо .

OriginalGriff

Всегда пожалуйста!

Рейтинг:
11

F-ES Sitecore

Вы не можете возвращать анонимные типы вне того места, где они созданы, вам нужно вернуть конкретный тип. Если в "очереди" есть нужные вам поля;

public static List<Queue> GetMostPrintedName(List<Queue> input)
        {
            var result =
            from print in input
            where print.AddedToQueue.Year == 2019 && print.AddedToQueue.Month == 6
            group print by print.PrinterName into PrinterNameGroup
            select new Queue
            {
                PrinterName = PrinterNameGroup.Key,
                Getcount = PrinterNameGroup.Count(),
            };


Если "Queue" не имеет PrinterName и Getcount, то создайте класс, который имеет эти свойства, и используйте его вместо этого.


[no name]

Спасибо за вашу помощь .