2010-04-22 135 views
1

我试图查询Netflix OData提要。我有以下查询,在LinqPad正常工作:动态Linq查询问题

from g in Genres 
from t in g.Titles 
where g.Name == "Horror" && t.AverageRating == 2 && t.ReleaseYear == 2004 
select t 

但是,当我将它交给我的Silverlight应用程序,用户选择什么搜索,所以我可能会或可能不会有所有的则params的。既然如此,我需要在运行时构造查询。香港专业教育学院看着动态查询的东西,并且会做得很好......我有问题,我需要一个初始接受查询,追加到,这不飞:

from g in Genres 
from t in g.Titles 
select t; 

有任何其他想法会赞赏。 在此先感谢

回答

1

你不做到这一点使用动态查询语法,但你可以。

你真的有两个查询发生,所以你应该建立它们。你可以一次完成所有事情,但是你需要两种不同的地方条款,一种是流派,一种是标题。考虑下面的例子,模仿你的情况。

class Foo 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public List<Bar> Bars { get; set; } 
} 

class Bar 
{ 
    public string Color { get; set; } 
} 

...

List<Foo> foos = new List<Foo>() 
{ 
    new Foo() { Id = 1, Name = "Apple", Bars = new List<Bar>() { new Bar() { Color = "Red"}, new Bar() { Color="Green"}} }, 
    new Foo() { Id = 2, Name = "Orange", Bars = new List<Bar>() { new Bar() { Color = "Orange"},new Bar() { Color="Red Orange"}} }, 
    new Foo() { Id = 3, Name = "Banana",Bars = new List<Bar>() { new Bar() { Color = "Yellow"},new Bar() { Color="Green"}} }, 
    new Foo() { Id = 4, Name = "Pear",Bars = new List<Bar>() { new Bar() { Color = "Green"},new Bar() { Color="Yellow"}} } 
}; 

string fooName = "Apple"; 
string barColor = "Green"; 

var fooQuery = foos.AsQueryable(); 

if (!string.IsNullOrEmpty(fooName)) 
{ 
    string filter = string.Format("Name = \"{0}\"", fooName); 
    fooQuery = fooQuery.Where(filter); 
} 

var barQuery = fooQuery.SelectMany(f => f.Bars); 

if (!string.IsNullOrEmpty(barColor)) 
{ 
    string filter = string.Format("Color = \"{0}\"", barColor); 
    barQuery = barQuery.Where(filter); 
} 

的第一件事是,它建立了一个FOOS查询。如果它需要过滤(基于fooSearchName变量),它会生成一个Where子句并将其添加到查询中。之后,它成为返回Bar元素的查询的基础。同样的事情,如果它需要过滤,则会生成一个Where子句并将其添加到查询中。

不幸的是,由于在第一步中正在评估类型推断,所以无法在步骤上构建一个单个查询。如果您要说var query = foos.AsQueryable();,则查询已经评估为IQueryable<Foo>,因此在稍后的语句中添加SelectMany以选择条失败,因为这要求查询为IQueryable<Bar>

在这样的情况下,你的手是被迫的,你必须一次构建查询,或者至少到SelectMany的部分,最后的where子句可以在后面添加。所以你可以做到这一点:

var query = foos.AsQueryable().Where(fooSearchClause).SelectMany(f => f.Bars); 
// later 
query = query.Where(barSearchClause); 

或者你构建查询为一个使用另一个,如我的示例所示。

无论如何,使用我提供的术语,遍历最终查询会得到一个结果。更改任一搜索变量的内容都会导致查询产生不同的结果。

+0

Anthony ...这是我最终做的....感谢您的帮助 IQueryable query = Context.Genres.AsQueryable()。其中​​(g => g.Name == qp.Genre) .SelectMany(f => f.Titles); \t \t \t if(!string.IsNullOrEmpty(qp.Rating)) qry = qry。Where(“AverageRating == @ 0”,rating); \t \t \t 如果(string.IsNullOrEmpty(qp.Year)!) QRY = qry.Where( “ReleaseYear == @ 0”,一年); – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/321744/">Alex</a></span> <span>2010-04-23 14:30:10</span> </small> </span> </p> </div> </div> </div> </div> </div> </article> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1038284119" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <article class="board-top-1 padding-top-10"> <div class="post-col vote-info"> <span class="count">1<i class="fa fa-thumbs-up"></i></span> </div> <div class="post-offset"> <div class="answer fmt"> <p>如何追加过滤旧式,非动态的方式?</p> <pre><code class="prettyprint-override">var genresQuery = from g in Genres select g; if (!string.IsNullOrEmpty(name)) genresQuery = genresQuery.Where(g => g.Name == name); var titlesQuery = from t in genresQuery select t; if (!string.IsNullOrEmpty(rating)) titlesQuery = titlesQuery.Where(t => t.AverageRating == rating); if (!string.IsNullOrEmpty(year)) titlesQuery = titlesQuery.Where(t => t.ReleaseYear == year); </code></pre> </div> <div class="post-info"> <div class="post-meta row"> <p class="text-secondary col-lg-6"> <span class="source"> <a rel="noopener" target="_blank" href="https://stackoverflow.com/q/2688108">来源</a> </span> </p> <p class="text-secondary col-lg-6"> <span class="float-right date"> <span>2010-04-22 03:47:08</span> </p> <p class="col-12"></p> <p class="col-12"></p></div> </div> </div> </article> </div> <div class="clearfix"> </div> <div class="relative-box"> <div class="relative">相关问题</div> <ul class="relative_list"> <li> 1. <a href="http://www.uwenku.com/question/p-ymncnuwn-sz.html" target="_blank" title="简单LINQ的动态查询问题"> 简单LINQ的动态查询问题 </a> </li> <li> 2. <a href="http://www.uwenku.com/question/p-oqxzdoll-kc.html" target="_blank" title="动态LINQ到NHibernate的查询问题"> 动态LINQ到NHibernate的查询问题 </a> </li> <li> 3. <a href="http://www.uwenku.com/question/p-oweqpnpn-hk.html" target="_blank" title="LINQ查询问题"> LINQ查询问题 </a> </li> <li> 4. <a href="http://www.uwenku.com/question/p-abskjcdq-xt.html" target="_blank" title="LINQ查询问题"> LINQ查询问题 </a> </li> <li> 5. <a href="http://www.uwenku.com/question/p-ndxcrfww-yv.html" target="_blank" title="LINQ查询问题"> LINQ查询问题 </a> </li> <li> 6. <a href="http://www.uwenku.com/question/p-spgabceb-or.html" target="_blank" title="Linq查询问题"> Linq查询问题 </a> </li> <li> 7. <a href="http://www.uwenku.com/question/p-mphzzkna-wz.html" target="_blank" title="LINQ查询问题"> LINQ查询问题 </a> </li> <li> 8. <a href="http://www.uwenku.com/question/p-vxwajbpw-or.html" target="_blank" title="LINQ问题 - 查询"> LINQ问题 - 查询 </a> </li> <li> 9. <a href="http://www.uwenku.com/question/p-bqocskmj-xt.html" target="_blank" title="LINQ查询问题"> LINQ查询问题 </a> </li> <li> 10. <a href="http://www.uwenku.com/question/p-ftvxnsce-bna.html" target="_blank" title="LINQ查询问题"> LINQ查询问题 </a> </li> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-6208739752673518" data-ad-slot="4606349252"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <li> 11. <a href="http://www.uwenku.com/question/p-gjoepjbf-zy.html" target="_blank" title="LINQ查询问题"> LINQ查询问题 </a> </li> <li> 12. <a href="http://www.uwenku.com/question/p-nahxrita-zs.html" target="_blank" title="Linq查询问题"> Linq查询问题 </a> </li> <li> 13. <a href="http://www.uwenku.com/question/p-bjyzmbqi-bgv.html" target="_blank" title="动态LINQ查询"> 动态LINQ查询 </a> </li> <li> 14. <a href="http://www.uwenku.com/question/p-bwqulkgs-rk.html" target="_blank" title="动态LINQ查询"> 动态LINQ查询 </a> </li> <li> 15. <a href="http://www.uwenku.com/question/p-bjwlvryb-sp.html" target="_blank" title="动态LINQ查询"> 动态LINQ查询 </a> </li> <li> 16. <a href="http://www.uwenku.com/question/p-fbprtfke-bcc.html" target="_blank" title="动态LINQ查询"> 动态LINQ查询 </a> </li> <li> 17. <a href="http://www.uwenku.com/question/p-kithlwwb-nw.html" target="_blank" title="LINQ动态查询"> LINQ动态查询 </a> </li> <li> 18. <a href="http://www.uwenku.com/question/p-zlhtoayb-bhh.html" target="_blank" title="动态linq查询"> 动态linq查询 </a> </li> <li> 19. <a href="http://www.uwenku.com/question/p-wropjyvo-nm.html" target="_blank" title="Linq查询动态"> Linq查询动态 </a> </li> <li> 20. <a href="http://www.uwenku.com/question/p-zeacdbrw-oz.html" target="_blank" title="动态LINQ查询"> 动态LINQ查询 </a> </li> <li> 21. <a href="http://www.uwenku.com/question/p-tfzutqia-ne.html" target="_blank" title="动态LINQ表达式查询,得到问题"> 动态LINQ表达式查询,得到问题 </a> </li> <li> 22. <a href="http://www.uwenku.com/question/p-vluxsfrp-gd.html" target="_blank" title="MVC LINQ查询问题"> MVC LINQ查询问题 </a> </li> <li> 23. <a href="http://www.uwenku.com/question/p-tunyoflm-vn.html" target="_blank" title="问题在LINQ查询"> 问题在LINQ查询 </a> </li> <li> 24. <a href="http://www.uwenku.com/question/p-qsdoyhnu-yv.html" target="_blank" title="Linq到LLBLGen查询问题"> Linq到LLBLGen查询问题 </a> </li> <li> 25. <a href="http://www.uwenku.com/question/p-nqfejbfu-bkz.html" target="_blank" title="c#中Linq查询问题"> c#中Linq查询问题 </a> </li> <li> 26. <a href="http://www.uwenku.com/question/p-xqxjwlix-bbu.html" target="_blank" title="LINQ加入查询问题"> LINQ加入查询问题 </a> </li> <li> 27. <a href="http://www.uwenku.com/question/p-ptvofgvr-beb.html" target="_blank" title="LINQ EF查询问题"> LINQ EF查询问题 </a> </li> <li> 28. <a href="http://www.uwenku.com/question/p-tfgybzse-bgy.html" target="_blank" title="Linq查询问题的取"> Linq查询问题的取 </a> </li> <li> 29. <a href="http://www.uwenku.com/question/p-klcbdann-oc.html" target="_blank" title="C#LInq子查询问题"> C#LInq子查询问题 </a> </li> <li> 30. <a href="http://www.uwenku.com/question/p-zcggxsoe-rt.html" target="_blank" title="缓存Linq查询问题"> 缓存Linq查询问题 </a> </li> </ul> </div> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1575177025"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="padding-top-10"></div> </div> </div> <script type="text/javascript" src="http://img.uwenku.com/uwenku/script/side.js?t=1644592048176"></script> <script type="text/javascript" src="http://img.uwenku.com/uwenku/plugin/highlight/highlight.pack.js"></script> <link href="http://img.uwenku.com/uwenku/plugin/highlight/styles/docco.css" media="screen" rel="stylesheet" type="text/css" /> <script type="text/javascript"> $('pre').each(function(i, e) { hljs.highlightBlock(e, "<span class='indent'> </span>", false) }); </script> <div class="col-lg-3 col-md-4 col-sm-5"> <div id="rightTop"> <div class="row sidebar panel panel-default"> <div class="panel-heading font-bold"> 每日一句 </div> <div class="panel-body m-b-sm m-t-sm clearfix"> 每一个你不满意的现在,都有一个你没有努力的曾经。 </div> </div> <div class="row"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="5415218910" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="row sidebar panel panel-default"> <div class="panel-heading font-bold"> 最新问题 </div> <div class="m-b-sm m-t-sm clearfix"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://www.uwenku.com/question/p-xxjnrchz-bmn.html" target="_blank" title="手动创建类型标记"> 手动创建类型标记 </a> </li> <li class="side_article_list_item"> 2. <a href="http://www.uwenku.com/question/p-flzqfnpy-bnq.html" target="_blank" title="Unix查找与目录匹配的目录"> Unix查找与目录匹配的目录 </a> </li> <li class="side_article_list_item"> 3. <a href="http://www.uwenku.com/question/p-fgirnqqm-bnh.html" target="_blank" title="如何使用kwargs在matplotlib.axes.Axes.arrow蟒蛇2.7"> 如何使用kwargs在matplotlib.axes.Axes.arrow蟒蛇2.7 </a> </li> <li class="side_article_list_item"> 4. <a href="http://www.uwenku.com/question/p-xclrnojo-bcw.html" target="_blank" title="如何线程安全地读取和写入数据库?"> 如何线程安全地读取和写入数据库? </a> </li> <li class="side_article_list_item"> 5. <a href="http://www.uwenku.com/question/p-qfxwaqpv-bdc.html" target="_blank" title="只有当输入至少有一个数字时才显示mat-autocomplete"> 只有当输入至少有一个数字时才显示mat-autocomplete </a> </li> <li class="side_article_list_item"> 6. <a href="http://www.uwenku.com/question/p-kboumhhd-bdn.html" target="_blank" title="TweenJS旋转平滑问题"> TweenJS旋转平滑问题 </a> </li> <li class="side_article_list_item"> 7. <a href="http://www.uwenku.com/question/p-tyvjkldw-bhe.html" target="_blank" title="Android Firebase下载声音"> Android Firebase下载声音 </a> </li> <li class="side_article_list_item"> 8. <a href="http://www.uwenku.com/question/p-bchcuwxf-bgy.html" target="_blank" title="无法在asp.net MVC中查看JavaScript视图MVC"> 无法在asp.net MVC中查看JavaScript视图MVC </a> </li> <li class="side_article_list_item"> 9. <a href="http://www.uwenku.com/question/p-krwriddu-bhu.html" target="_blank" title="将样式应用到jqgrid"> 将样式应用到jqgrid </a> </li> <li class="side_article_list_item"> 10. <a href="http://www.uwenku.com/question/p-tzmmimzp-bho.html" target="_blank" title="访问查询:在不使用DSum的情况下运行总计(或另一种方法)?"> 访问查询:在不使用DSum的情况下运行总计(或另一种方法)? </a> </li> </ul> </div> </div> </div> <p class="article-nav-bar"></p> <div class="row sidebar article-nav"> <div class="row box_white visible-sm visible-md visible-lg margin-zero"> <div class="top"> <h3 class="title"><i class="glyphicon glyphicon-th-list"></i> 相关问题</h3> </div> <div class="article-relative-content"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://www.uwenku.com/question/p-ymncnuwn-sz.html" target="_blank" title="简单LINQ的动态查询问题"> 简单LINQ的动态查询问题 </a> </li> <li class="side_article_list_item"> 2. <a href="http://www.uwenku.com/question/p-oqxzdoll-kc.html" target="_blank" title="动态LINQ到NHibernate的查询问题"> 动态LINQ到NHibernate的查询问题 </a> </li> <li class="side_article_list_item"> 3. <a href="http://www.uwenku.com/question/p-oweqpnpn-hk.html" target="_blank" title="LINQ查询问题"> LINQ查询问题 </a> </li> <li class="side_article_list_item"> 4. <a href="http://www.uwenku.com/question/p-abskjcdq-xt.html" target="_blank" title="LINQ查询问题"> LINQ查询问题 </a> </li> <li class="side_article_list_item"> 5. <a href="http://www.uwenku.com/question/p-ndxcrfww-yv.html" target="_blank" title="LINQ查询问题"> LINQ查询问题 </a> </li> <li class="side_article_list_item"> 6. <a href="http://www.uwenku.com/question/p-spgabceb-or.html" target="_blank" title="Linq查询问题"> Linq查询问题 </a> </li> <li class="side_article_list_item"> 7. <a href="http://www.uwenku.com/question/p-mphzzkna-wz.html" target="_blank" title="LINQ查询问题"> LINQ查询问题 </a> </li> <li class="side_article_list_item"> 8. <a href="http://www.uwenku.com/question/p-vxwajbpw-or.html" target="_blank" title="LINQ问题 - 查询"> LINQ问题 - 查询 </a> </li> <li class="side_article_list_item"> 9. <a href="http://www.uwenku.com/question/p-bqocskmj-xt.html" target="_blank" title="LINQ查询问题"> LINQ查询问题 </a> </li> <li class="side_article_list_item"> 10. <a href="http://www.uwenku.com/question/p-ftvxnsce-bna.html" target="_blank" title="LINQ查询问题"> LINQ查询问题 </a> </li> </ul> </div> </div> </div> </div> </div> </div> </div><!-- wrap end--> <!-- footer --> <footer id="footer"> <div class="bg-simple lt"> <div class="container"> <div class="row padder-v m-t"> <div class="col-xs-8"> <ul class="list-inline"> <li><a href="http://www.uwenku.com/contact">联系我们</a></li> <li>© 2020 UWENKU.COM</li> <li><a target="_blank" href="https://beian.miit.gov.cn/">沪ICP备13005482号-4</a></li> <li><script type="text/javascript" src="https://v1.cnzz.com/z_stat.php?id=1280101193&web_id=1280101193"></script></li> <li><a href="http://www.uwenku.com/" target="_blank" title="优文库">简体中文</a></li> <li><a href="http://hk.uwenku.com/" target="_blank" title="優文庫">繁體中文</a></li> <li><a href="http://ru.uwenku.com/" target="_blank" title="поле вопросов и ответов">Русский</a></li> <li><a href="http://de.uwenku.com/" target="_blank" title="Frage - und - antwort - Park">Deutsch</a></li> <li><a href="http://es.uwenku.com/" target="_blank" title="Preguntas y respuestas">Español</a></li> <li><a href="http://hi.uwenku.com/" target="_blank" title="कार्यक्रम प्रश्न और उत्तर पार्क">हिन्दी</a></li> <li><a href="http://it.uwenku.com/" target="_blank" title="IL Programma di chiedere Park">Italiano</a></li> <li><a href="http://ja.uwenku.com/" target="_blank" title="プログラム問答園区">日本語</a></li> <li><a href="http://ko.uwenku.com/" target="_blank" title="프로그램 문답 단지">한국어</a></li> <li><a href="http://pl.uwenku.com/" target="_blank" title="program o park">Polski</a></li> <li><a href="http://tr.uwenku.com/" target="_blank" title="Program soru ve cevap parkı">Türkçe</a></li> <li><a href="http://vi.uwenku.com/" target="_blank" title="Đáp ứng viên">Tiếng Việt</a></li> <li><a href="http://fr.uwenku.com/" target="_blank" title="Programme interrogation Park">Française</a></li> </ul> </div> </div> </div> </div> </div> </footer> <!-- / footer --> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f78a970f17b19a79fc477a3378096f29"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>