Oi SuperUser, tudo bem?
Você pode usar o método Join
, como no exemplo abaixo:
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
var itemsNotaFiscal = new List<ItemNotaFiscal>
{
new ItemNotaFiscal(123, 1, 10.0m),
new ItemNotaFiscal(123, 2, 20.0m),
new ItemNotaFiscal(123, 3, 30.0m),
new ItemNotaFiscal(222, 1, 10.0m),
new ItemNotaFiscal(222, 2, 20.0m),
new ItemNotaFiscal(444, 1, 10.0m),
new ItemNotaFiscal(444, 2, 20.0m)
};
//var query =
//from i1 in itemsNotaFiscal
//join i2 in itemsNotaFiscal
//on i1.NotaFiscalId equals i2.NotaFiscalId
//select i1;
var query =
itemsNotaFiscal.AsEnumerable().Join(itemsNotaFiscal.AsEnumerable(),
i1 => i1.NotaFiscalId,
i2 => i2.NotaFiscalId,
(i2, i1) => i1);
foreach (var item in query)
{
Console.WriteLine($"NotaFiscalId: {item.NotaFiscalId}, ProdutoId: {item.ProdutoId}, Valor: {item.Valor:C}");
}
}
}
public class ItemNotaFiscal
{
public ItemNotaFiscal(int notaFiscalId, int produtoId, decimal valor)
{
NotaFiscalId = notaFiscalId;
ProdutoId = produtoId;
Valor = valor;
}
public int NotaFiscalId { get; set; }
public int ProdutoId { get; set; }
public decimal Valor { get; set; }
}
Você pode testar essa consulta online aqui:
https://dotnetfiddle.net/HcnBj2