Как уменьшить результат, заданный для каждой n-й строки в ASP.NET Linq для Entities [duplicate]

Если вы используете только функцию mail(), вам нужно заполнить конфигурационный файл.

Вам нужно открыть расширение почты и установить SMTP smtp_port и т. д., и самое главное, ваше имя пользователя и пароль. Без этого почта не может быть отправлена. Кроме того, вы можете использовать класс PHPMail для отправки.

21
задан Manfred Radlwimmer 23 May 2016 в 06:44
поделиться

7 ответов

Если вы используете LINQ to SQL или LINQ to Entities, вы должны полностью полностью реализовать результаты в памяти:

var oddCategories  = projectsByCat.ToList().Where((c,i) => i % 2 != 0);
var evenCategories = projectsByCat.ToList().Where((c,i) => i % 2 == 0);

Невозможно выполнить итерацию результатов в базе данных с помощью индексатора без использования курсора, который не работает либо с каркасом ORM.

42
ответ дан Mark Cidade 23 August 2018 в 00:08
поделиться
  • 1
    Это сделало это - я делаю 95% LINQ для объектов, поэтому возможность того, что это проблема с LINQ to SQL, даже не ударила меня. Благодаря! – Rune Jacobsen 6 November 2008 в 00:05

Нечетные категории и четные категории обращаются назад.

Индексы начинают a 0 не 1

0% 2 = 0

0 индекс нечетный.

var oddCategories  = projectsByCat.Where((cat, index) => index % 2 == 0);

var evenCategories = projectsByCat.Where((cat, index) => index % 2 != 0);
6
ответ дан EdChum 23 August 2018 в 00:08
поделиться

Обратите внимание, что вызов .ToList() дважды для одного и того же запроса будет дважды запрашивать базу данных.

Было бы гораздо лучше кэшировать результат в промежуточном списке, , затем примените предикатную фильтрацию:

var projectsByCat =
    (from p in Projects
    group p by p.Category into g
    orderby g.Count() descending
    select new { Category = g.Key, Projects = g }).ToList();

var oddCategories = projectsByCat.Where((cat, index) => index % 2 != 0);
var evenCategories = projectsByCat.Where((cat, index) => index % 2 == 0);
22
ответ дан Jacob Carpenter 23 August 2018 в 00:08
поделиться

Правильный способ сделать это с помощью LINQ и избегать множественных перечислений над входом состоит в том, чтобы сделать группировку или аналогичную информацию о том, является ли каждый элемент четным или нечетным.

Простой способ использования перегрузки для Select, что смешивается в индексе , связанном с ToLookup , дает вам то, что вы хотите:

var oddsAndEvens = input
    .ToList() // if necessary to get from IQueryable to IEnumerable
    .Select((item, index) => new { isEven = index % 2 != 0, item })
    .ToLookup(
        i => i.isEven,
        i => i.item);

Это приведет к Lookup<TKey, TElement> , которая имеет следующее преимущество :

Если ключ не найден в коллекции, возвращается пустая последовательность.

Это означает, что после указанного выше запроса LINQ вы можете:

var evens = oddsAndEvens[true];
var odds = oddsAndEvens[false];
3
ответ дан Lasse Vågsæther Karlsen 23 August 2018 в 00:08
поделиться

Вы можете отделить нечетные и даже ваши взгляды с помощью linq.

//even 
@foreach (var item in Model.Where((item, index) => index % 2 == 0))
{
     //do the code
}

//odd
@foreach (var item in Model.Where((item, index) => index % 2 != 0))
{
     //do the code
}
1
ответ дан Raymond de la Croix 23 August 2018 в 00:08
поделиться

var s = "это тестовая строка < > для извлечения нечетных < индексов > значений после разделения"; var l = s.Split (new char [] {'& lt;', '>'}; IEnumerable e = l.Where (x => ((l.ToList (). IndexOf (x)% 2) == 1 )); 'e' будет: 'string' и 'index'

0
ответ дан Sam Saarian 23 August 2018 в 00:08
поделиться

Вы можете найти Даже нечетное число без цикла foreach

static void Main(string[] args)
{
    List<int> lstnum = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

    List<int> lstresult = lstnum.FindAll(x => (x % 2) == 0);

    lstresult.ForEach(x => Console.WriteLine(x));
}
0
ответ дан Stephen Rauch 23 August 2018 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: