Tengo una lista de int llamada "motor_list" = 2, 3, 5, 3, 8, 5, 5, 9, 8 (Lista 2)
(3 = 2 times in the list) (5 = 3 times)Tengo una tabla (Elemento), cuya fila de contenido "ItemId, Nombre, Fecha, Ubicación", y solo contiene 2 datos:
(ItemId) = 3 and 5. (List 1)
var data = _context.Item.Where(x => motor_list.Contains(x.ItemId));Usando el código anterior, solo obtengo dos datos que obviamente son correctos técnicamente,
ahora quiero obtener datos, pero de acuerdo con la ocurrencia de motor_list (Lista 2), y no el de la tabla de elementos.
Quiero decir que quiero obtener algo como:
ItemId 3 should pull 2 times the same data, and ItemId 5 should pull 3 times.Prueba este código
List<int> list1 = new List<int>() { 3, 5 }; List<int> list2 = new List<int>() { 2, 3, 5, 3, 8, 5, 5, 9, 8 }; var data = list2.GroupBy(x => x).Where(a => list1.Contains(a.Key)); var result= data.Select(g => $"ItemId {g.Key} should pull {g.Count()} times").ToList(); foreach (var item in result) { Console.WriteLine(item); }Use join para devolver exactamente los elementos en motor_list .
var data = motor_list .Join(_context.Item, left => left, right => right.ItemId, (left, right) => new { items = right });o un poco más lejos
var data = _context.Item.ToList(); var result = lst.Select(x => new { item = data.Where(a => a.ID == x).FirstOrDefault() }).Where(a=>a.item != null).ToList();No estoy seguro de lo que quiere decir con "ItemId 3 debe extraer 2 veces los mismos datos" . Parece que desea el recuento de cada ItemId en motor_list, o desea que los elementos duplicados se devuelvan en los resultados.
Así es como puede lograr cualquiera de los dos:
class Item { public int ItemId { get; set; } } static void Main(string[] args) { List<Item> contextItems = new List<Item> { new Item { ItemId = 3 }, new Item { ItemId = 5 } }; var motor_list = new List<int> { 2, 3, 5, 3, 8, 5, 5, 9, 8 }; // To get the count of each contextItem in motor_list: var itemCount = contextItems .Select(contextItem => motor_list.Count(motorId => motorId == contextItem.ItemId)) .ToList(); // result: { 2, 3 } // To get duplicate items for each contextItem in motor_list var items = motor_list .Where(motorId => contextItems.Any(contextItem => contextItem.ItemId == motorId)) .ToList(); // result: { 3, 5, 3, 5, 5 } }