2015-11-24 175 views
0

我有我撰寫這從一些選項的查詢,這樣查詢組成了LINQ實體框架

string q1 ="SELEC * from MyTable"; 
string q2 =string .Empty; 

if(options1) 
q2+=" Condition_1 "; 
if(options2) 
q2+=" Condition_2"; 
if(!String.IsNullOrEmpty(q2)) 
q1+=" WHERE"+q2; 

cmd.Execute(... 

我該怎麼做,對LINQ了在短短的一個嘗試實體框架-6?

+0

你可以用三元運算符來檢查條件,比如'from myTable where Options1? FieldtoCompare:-1等於Options1? 「Condition_1」:0和Options2? FieldtoCompare:-1等於Options2? 「Condition_2」:0' – Nilesh

+0

@Nilesh但有時候這個作品有多個表格,我在多個表格上有一些大的作品,只有當選項需要時才需要表格。 – saimmm0710

回答

0

你可以做到這一點通過與IQueryable的工作。 這個例子可以幫助你:

//Define your query without executing it.     
IQueryable<YourEntityType> query= (from s in Context.MyTable select s); 

if(options1) 
//Add a where clause to your IQueryable 
    query= query.Where(p=> p.SomeProperty == "Something"); 

if(options2) 
//Add another where clause to your IQueryable 
query= query.Where(p=> p.SomeProperty == "Something else"); 

//Executes the query depending your options. 
var Result = query.ToList(); 
+0

你的意思是,我可以編寫linq而無需運行查詢,畢竟,我將通過調用ToList或...運行一個且只有一個鏈接查詢,謝謝 – saimmm0710

+0

是的,查詢不會運行,直到你調用.toList(),.AsEnumerable()或其他任何檢索你的行。 –

0

是的,你可以。你可以鏈接幾個.Where操作。所以,你可以寫SMT像

var set = MySet; 
    if (cond_1) { 
     set = set.Where(a=>...); 
    } 
    if (cond_2) { 
     set = set.Where(a=>...); 
    } 
    set.ToList()