Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架原始查询到linq_C#_Sql_Linq_Entity Framework - Fatal编程技术网

C# 实体框架原始查询到linq

C# 实体框架原始查询到linq,c#,sql,linq,entity-framework,C#,Sql,Linq,Entity Framework,我有这样的原始查询: 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.id

我有这样的原始查询:

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";

此查询能否转换为实体框架linq查询?

是的,这是可能的。查看以下Linq示例:

IN运算符可以转换为任意扩展方法

类似的内容可以转换为Contains扩展方法

这不是最好的解决方案,但我希望这将是一个良好的起点:

 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));

这很有帮助。我必须修复一些东西,但代码很棒。非常感谢。现在我还有一个问题。看看checkBox1.checkedquery=query.Wherek=>k.nije\u tu==0;else query=query,其中k=>k.nije_-tu==0 | | k.nije_-tu==1.0;例如,我有一部电影《金色的眼睛》,它的k.nije_tu同时=1和=0,现在我在列表中看到这部电影两次。我想应该有包含的东西,但我不知道如何修复它。问题是我只是在猜测你的查询应该做什么。我想无论电影拷贝是否出租,nije_tu都是一个布尔值。在这种情况下,该代码在0,1中是不必要的,否则upit+=k.nije_tu;看看这个问题,我认为他们在处理同一个问题。