Перевести SQL-запрос на Linq для сущностей - PullRequest
0 голосов
/ 06 октября 2019

Здравствуйте, вот SQL-запрос:

select FICHES_ARTICLES.ART_CODE,ART_LIBELLE1,SUM(det_pnet) as PoidsNet
from STOCK_ENT,STOCK_DET,FICHES_ARTICLES,CLIENTS,MVTS_SEQUENCE
where STOCK_ENT.ENT_ID=STOCK_DET.ENT_ID
and STOCK_ENT.ENT_PROP=CLIENTS.CLI_CODE
and STOCK_ENT.ART_CODE=FICHES_ARTICLES.ART_CODE
and STOCK_ENT.ENT_ID=MVTS_SEQUENCE.ENT_ID
and SEQ_STATUT<>'V'
and CLI_CODE='0030000'
group by ART_LIBELLE1,FICHES_ARTICLES.ART_CODE
having SUM(det_pnet)<2000
order by ART_LIBELLE1;
go

Я хочу написать то же самое с Linq для сущностей в приложении WPF. Итак, вот что у меня есть:

private void GetDatas()
    {
        using(GSUITEEntities dc=new GSUITEEntities())
        {
            try
            {
                var query = from ent in dc.STOCK_ENT
                            join det in dc.STOCK_DET on ent.ENT_ID equals det.ENT_ID
                            join art in dc.FICHES_ARTICLES on ent.ART_CODE equals art.ART_CODE
                            join cli in dc.CLIENTS on ent.ENT_PROP equals cli.CLI_CODE
                            join seq in dc.MVTS_SEQUENCE on ent.ENT_ID equals seq.ENT_ID
                            where seq.SEQ_STATUT != "V" && cli.CLI_CODE == "0030000"
                            group new { ent, det, art, cli, seq } by new
                            {
                                art.ART_CODE,
                                art.ART_LIBELLE1
                            } into grouped
                            orderby grouped.Key.ART_LIBELLE1
                            select new
                            {
                                code=grouped.Key.ART_CODE,
                                lib=grouped.Key.ART_LIBELLE1,
                                pnet=grouped.Sum(x=>x.det.DET_PNET)
                            };
            }
            catch (Exception)
            {

                throw;
            }
        }
    }

То, что я не могу перевести, - это Having SUM(det_pnet) часть SQL-запроса. Может кто-нибудь направить меня в правильном направлении?

Спасибо

1 Ответ

0 голосов
/ 07 октября 2019

Попробуйте использовать предложение let :

var query = from ent in dc.STOCK_ENT
            join det in dc.STOCK_DET on ent.ENT_ID equals det.ENT_ID
            join art in dc.FICHES_ARTICLES on ent.ART_CODE equals art.ART_CODE
            join cli in dc.CLIENTS on ent.ENT_PROP equals cli.CLI_CODE
            join seq in dc.MVTS_SEQUENCE on ent.ENT_ID equals seq.ENT_ID
            where seq.SEQ_STATUT != "V" && cli.CLI_CODE == "0030000"
            group new { ent, det, art, cli, seq } by new
            {
                art.ART_CODE,
                art.ART_LIBELLE1
            } into grouped
            let sum = grouped.Sum(x => x.det.DET_PNET)
            where sum > 2000
            orderby grouped.Key.ART_LIBELLE1
            select new
            {
                code = grouped.Key.ART_CODE,
                lib = grouped.Key.ART_LIBELLE1,
                pnet = sum
            };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...