Преобразуйте SQL в LINQ с помощью группирования и суммирования

#sql #asp.net #linq #c#-3.0

Вопрос:

Я новичок в LINQ и пытаюсь преобразовать этот sql-запрос в LINQ безрезультатно. Помогите, пожалуйста

 select z.des_zona,s.des_sector , sum(sueldo)as Sueldos 
from Personas p
inner join Sectores s on s.cod_sector=p.cod_sector
inner join Zonas z on z.cod_zona=p.cod_zona
group by z.des_zona,s.des_sector
 

Комментарии:

1. Хорошим началом было бы найти O/R-картограф, поддерживающий LINQ.

2. Используете ли вы Entity Framework? «Я пытаюсь преобразовать этот sql-запрос в LINQ без успеха» Покажите нам вашу попытку.

3. Да, я хочу использовать его в ASP. Net

4. гадюка. Сеть здесь не имеет значения. Более уместно показать, что вы пытались и почему это было «безуспешно». Мы не сможем вам помочь, если нам придется взять на себя все.

Ответ №1:

Предполагая, что ваши сущности похожи на это

 public class Persona
{
    public int sueldo { get; set; }
    public string cod_sector { get; set; }
    public string cod_zona { get; set; }
}

public class Sectore
{
    public string cod_sector { get; set; }
}

public class Zona
{
    public string cod_zona { get; set; }
}
 

Вот ссылка

 Personas.Join(Sectores, l => l.cod_sector, r => r.cod_sector, (l, r) => new { Persona = l, r.cod_sector })
    .Join(Zonas, l => l.Persona.cod_zona, r => r.cod_zona, (l, r) => new { l.Persona.sueldo, l.cod_sector, r.cod_zona })
    .GroupBy(i => new { i.cod_zona, i.cod_sector })
    .Select(g => new
    {
        g.Key.cod_zona,
        g.Key.cod_sector,
        Sueldos = g.Sum(i => i.sueldo)
    })
    .ToList();
 

Комментарии:

1. Одним из главных преимуществ ORM, подобного Entity Framework, является то, что мы можем использовать свойства навигации и, следовательно, почти никогда не нуждаемся в соединениях в LINQ.

2. Да, трудно использовать чистый linq, работающий с несколькими соединениями.

3. Ну, тогда не надо.