简体   繁体   English

实体框架原始查询到linq

[英]Entity framework raw query to linq

I have raw query that goes like this: 我有这样的原始查询:

string upit = "select f.idFilm as idFIlm, f.naziv as nazivFilm, z.naziv as nazivZanr, f.idZanr as idZanr, f.godina as godina, f.slika, f.klip <br>
from video_klub_sema.film as f <br>
inner join video_klub_sema.zanr as z on z.idZanr=f.idZanr <br>
inner join video_klub_sema.kopija as k on f.idFilm=k.idFilm where ";

if (checkBox1.Checked)
    upit += "k.nije_tu=0 ";
else
    upit += " k.nije_tu in (0,1)";

if (comboBoxGodina.SelectedIndex == 0)
    upit += " and f.godina in (select distinct godina from video_klub_sema.film)";
else
    upit += " and f.godina=" + comboBoxGodina.SelectedItem.ToString();

if (comboBoxZanr.SelectedIndex == 0)
    upit += " and f.idZanr in (select idZanr from video_klub_sema.zanr)";
else
    upit += " and f.idZanr= (select idZanr from video_klub_sema.zanr where naziv = '" + comboBoxZanr.SelectedItem.ToString() + "')";

if (textNaziv.Text != "")
    upit += " and f.naziv like '%" + textNaziv.Text + "%'";

upit += " GROUP BY f.naziv, f.idFilm, z.naziv, f.idZanr, f.godina, f.slika, f.klip";

Can this query be converted into entity-framework linq query? 可以将此查询转换为实体框架linq查询吗?

Yes it is possible. 对的,这是可能的。 Check out these Linq samples: 查看以下Linq示例:

http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

the IN operator can be translated into the Any extension method. IN运算符可以转换为Any扩展方法。

the LIKE can be translated into the Contains extension method. 可以将LIKE转换为Contains扩展方法。

Like Operator in Entity Framework? 像实体框架中的运算符一样?

Not the best solution, but I hope it will be a good starting point: 这不是最佳解决方案,但我希望这将是一个很好的起点:

 var query = from f in filmTable
                     join z in zanrTable on f.idZanr equals z.idZanr
                     join k in kopijaTable on f.idFilm equals k.idFilm
                     select new
                                {
                                    idFIlm=f.idFilm ,
                                    nazivFilm=f.naziv,
                                    nazivZanr=z.naziv,
                                    idZanr=f.idZanr,
                                    godina=f.godina,
                                    f.slika, 
                                    f.klip,
                                    k.nije_tu
                                };

        if (checkBox1.Checked)
            query =query.Where(k=>k.nije_tu==0);
        else
            query = query.Where(k => k.nije_tu == 0|| k.nije_tu==1);

        var godinaSubQuery = filmTable.Select(f => f.godina).Distinct();
        if (comboBoxGodina.SelectedIndex == 0)
            query = query.Where(f => godinaSubQuery.Contains(f.godina));
        else
            query= query.Where(f=>f.godina== comboBoxGodina.SelectedItem.ToString());

        if (comboBoxZanr.SelectedIndex == 0)
            query = query.Where(f => zanrTable.Select(p => p.idZanr).Contains(f.idZanr));
        else
           query =query.Where(f=>f.idZanr==zanrTable.FirstOrDefault(z=>z.naziv== comboBoxZanr.SelectedItem.ToString().idZanr));

        if (textNaziv.Text != "")
            query =query.Where(f=>f.nazivFilm.Contains(textNaziv.Text));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM