且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何将SQL查询转换为linq C#?

更新时间:2023-02-14 11:32:20

我会用一个数字写这个步骤(我会很高兴看到有人回答并在一个Linq声明中做到这一切,我很乐意扩展我的知识)



第1步



第一个Linq查询

a)返回一个匿名对象的明确列表

b)(如果你真的是一个类想要),包含Sirket.SirketAdi,Miktar和Ay

c)的值,你已经指定

d)其中一个'where'子句在哪里Ay> = 1 && Ay< = 12



应该给你12个'对象'与{Sirket.SirketAdi,Miktar,Ay} - '崩溃'根据'd'查询一点使其更易于管理(imho)



步骤2



来自那时我的第一个Linq查询?项目Ay - > Ocak/Şubat/Mart/Nisan/ ...并且可能会返回一个元组字典,以便你有



[Ocak - &GT; tuple< sirket.sirketadi,Miktar对Ocak的价值>]

[Şubat - > tuple< sirket.sirketadi,Miktar对于Subat的价值>]

...



(可能)第3步



我不会说土耳其语,但我猜Ocak,Şubat,...,Aralık是月份名称,因此按月名称索引可能有意义。



因为我不知道Sirket.SirketAdi是什么,我不知道它的值变化是否是静态的 - 因此元组 - 如果它是静态的,你实际上可以使用第三个linq查询从第一个结果中获取值而不用担心元组
I would have written this in a number of steps (I'll be delighted to see if someone answers and does it all on one Linq statement, Im quite happy to extend my knowledge)

Step 1

First Linq Query
a) return a distinct list
b) of an anonymous object (or a class if you really want), containing values for Sirket.SirketAdi, Miktar, and Ay
c) with the joins etc as you've specified
d) one of your 'where' clauses is where Ay >= 1 && Ay <= 12

that should give you 12 'objects' with {Sirket.SirketAdi,Miktar,Ay} - ‘collapsing’ the query a little as per ‘d’ makes it more manageable (imho)

Step 2

From the First Linq Query I'd then ? project Ay -> "Ocak"/"Şubat"/"Mart"/"Nisan"/... and maybe return a dictionary of tuples so that you have

["Ocak" -> tuple<sirket.sirketadi,Value of Miktar for "Ocak">]
["Şubat" -> tuple<sirket.sirketadi,Value of Miktar for "Subat">]


(Possible) Step 3

I don’t speak Turkish, but Im guessing Ocak, Şubat, … , Aralık are month names, so indexing by Month name may make sense.

Since I don’t know what Sirket.SirketAdi is, I don’t know if its value changes of is static - hence the tuple - if its static, you could in effect use a 3rd linq query to get the value from the first result and not worry about the tuple


/ *我尝试了这个linq查询但是没有工作区别* /





/*i tried to this linq query but dont work distinct */


var sonuc = (from kasaIslem in _db.KasaIslemleri
                        join sirket in _db.Sirketler on kasaIslem.SirketID equals sirket.ID
                        join kasaTur in _db.KasaTurleri on kasaIslem.KasaTurID equals kasaTur.ID
                        where kasaTur.ID == 1 && kasaIslem.Yil == Year

                        select new
                        {
                            sirket.SirketAdi,
                            Ocak = _db.KasaIslemleri.Where(x => x.SirketID == sirket.ID && x.Ay == 1 && x.Yil == Year).Select(x => x.Miktar).FirstOrDefault(),
                            Şubat = _db.KasaIslemleri.Where(x =>x.SirketID == sirket.ID && x.Ay == 2 && x.Yil == Year).Select(x => x.Miktar).FirstOrDefault(),
                            Mart = _db.KasaIslemleri.Where(x => x.SirketID == sirket.ID && x.Ay == 3 && x.Yil == Year).Select(x => x.Miktar).FirstOrDefault(),
                            Nisan = _db.KasaIslemleri.Where(x => x.SirketID == sirket.ID && x.Ay == 4 && x.Yil == Year).Select(x => x.Miktar).FirstOrDefault(),
                            Mayıs = _db.KasaIslemleri.Where(x => x.SirketID == sirket.ID && x.Ay == 5 && x.Yil == Year).Select(x => x.Miktar).FirstOrDefault(),
                            Haziran = _db.KasaIslemleri.Where(x => x.SirketID == sirket.ID && x.Ay == 6 && x.Yil == Year).Select(x => x.Miktar).FirstOrDefault(),
                            Temmuz = _db.KasaIslemleri.Where(x => x.SirketID == sirket.ID && x.Ay == 7 && x.Yil == Year).Select(x => x.Miktar).FirstOrDefault(),
                            Ağustos = _db.KasaIslemleri.Where(x => x.SirketID == sirket.ID && x.Ay == 8 && x.Yil == Year).Select(x => x.Miktar).FirstOrDefault(),
                            Eylül = _db.KasaIslemleri.Where(x => x.SirketID == sirket.ID && x.Ay == 9 && x.Yil == Year).Select(x => x.Miktar).FirstOrDefault(),
                            Ekim = _db.KasaIslemleri.Where(x => x.SirketID == sirket.ID && x.Ay == 10 && x.Yil == Year).Select(x => x.Miktar).FirstOrDefault(),
                            Kasım = _db.KasaIslemleri.Where(x => x.SirketID == sirket.ID && x.Ay == 11 && x.Yil == Year).Select(x => x.Miktar).FirstOrDefault(),
                            Aralık = _db.KasaIslemleri.Where(x => x.SirketID == sirket.ID && x.Ay == 12 && x.Yil == Year).Select(x => x.Miktar).FirstOrDefault()
                        }
                    );

           return sonuc;