visual suma sacar saber pares numeros numero mostrar imprimir impares impar contar como calcular c# linq

c# - suma - Obteniendo parte impar/par de una secuencia con LINQ



numeros impares del 1 al 100 c# (7)

La forma correcta de hacer esto usando LINQ, y evitar enumeraciones múltiples sobre la entrada, es hacer una agrupación o similar sobre si cada elemento es par o impar.

Una forma sencilla de usar la sobrecarga para Select que se mezcla en un índice junto con ToLookup le proporciona lo que desea:

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);

Esto producirá una estructura de datos Lookup<TKey, TElement> que tiene el siguiente beneficio :

Si la clave no se encuentra en la colección, se devuelve una secuencia vacía.

Esto significa que después de la consulta LINQ anterior puede hacer:

var evens = oddsAndEvens[true]; var odds = oddsAndEvens[false];

Supongamos que tengo una lista de todos los Projects y que los agrupo por Category esta manera:

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

Ahora quiero mostrar esto como una lista en una página web, donde primero creo el div del lado izquierdo, luego el div del lado derecho. Estoy ordenando por cantidad de Projects en cada Category para mostrar las Categories con la mayoría de los Projects en la parte superior, por lo tanto, me gustaría dividir los projectsByCat en dos, si coloco todas las categorías "con números impares" a la izquierda y las "pares". categorías de la derecha, creo que tendré una visión razonablemente sensata.

Así que pensé que podría hacer esto para obtener los miembros pares e impares de projectsByCat :

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

Y se compila, sin embargo, cuando lo ejecuto, recibo una excepción como esta:

Sobrecarga no admitida utilizada para el operador de consulta ''Dónde''.

Y pensé que estaba a salvo desde que compiló en primer lugar ...;)

¿Hay una manera elegante de hacer esto? Y también, ¿hay una explicación elegante de por qué mi uso creativo de Where() no funcionará?

¡Gracias por adelantado!


Las categorías odd y evenCategories están atrasadas.

Los índices comienzan a 0 no 1

0% 2 = 0

0 índice es impar.

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


Puede separar impar y par en su vista usando 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 }


Si está utilizando LINQ to SQL o LINQ to Entities, primero debe materializar completamente los resultados en la memoria:

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

No es posible iterar a través de los resultados en la base de datos con un indexador sin el uso de un cursor, que tampoco funciona con el marco ORM.


Tenga en cuenta que llamar a .ToList() dos veces para la misma consulta va a consultar la base de datos dos veces.

Sería mucho mejor guardar en caché el resultado en una lista intermedia, luego aplicar su filtrado de predicados:

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);


Usted puede encontrar incluso un número impar sin un bucle 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)); }


var s = "esta es una prueba < cadena > para extraer los valores impares de < índice después de la división"; var l = s.Split (new char [] {''<'', ''>''}; IEnumerable e = l.Where (x => ((l.ToList (). IndexOf (x)% 2) == 1) ); ''e'' sería: ''cadena'' e ''índice''