2013-03-20 66 views
3

我需要使用LINQ的声明如下LINQ的最有效的方法

 var data = db.tbl1 
     .Where(w => clientIds == clientid && w.Source == source); 

我有一个下拉菜单,其中我从越来越来源。下拉值是这样的:

All 
NewsPaper 
Web 

事情是NewsPaper和Web是Source的有效值。一切都不是。 全部表示记录可以是NewsPaper或Web。

如果他们选择全部,我该如何修改w.Source,使得所有的意思是NewsPaper或Web。 我可以做2个独立的查询,如下而是未显示:

if(source == "All") 
    { 
     var data = db.tbl1 
     .Where(w => clientIds == clientid); 
    } 
    else 
    { 
     var data = db.tbl1 
     .Where(w => clientIds == clientid && w.Source == source); 
    } 

我喜欢做它在1个查询作为查询我其实比上面显示更加复杂。

预先感谢您

回答

4

@mattytommo答案是可以接受的,但我更愿意打破他们了一点。国际海事组织更可读一点。

var data = db.tbl1.Where(w => clientIds == clientid); 

if (source != "All") 
    data = data.Where(w => w.Source == source); 
+1

这也利用了LINQ表达式懒惰评估的事实。你不会*尝试将所有内容塞进一个声明中。 – GalacticCowboy 2013-03-20 21:04:38

+0

好处是,您可以保持连接逻辑,直到您将查询实现为“列表”为例。 – 2013-03-20 21:05:59

+1

这更好,IMO,因为它更具可读性。它在所有情况下都更有效率,因为你失去了额外的比较。 – 2013-03-20 21:06:44

5

试试这个:

var data = db.tbl1 
    .Where(w => clientIds == clientid && (source == "All" || w.Source == source));