Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Join com sintaxe de método

Marcelo, bom dia!

Estou na segunda aula: Aplique Análise de Afinidade para sugerir compras de produtos, na atividade número 1, pois bem, no vídeo é demostrado como efetuar um Self Join utilizando a sintaxe de consulta... terias como explicar como ficaria a mesma estrutura, porém utilizando a sintaxe de método ?

Caso isso seja mostrado ao longo do curso, peço desculpas!

Abraços.

1 resposta
solução

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