2015-11-24 3 views
0

У меня есть запрос, который я сочинить его из некоторых вариантов, как этосостав запросов над LINQ Entity Framework-

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

Вы можете проверить состояние с тройным оператора что-то вроде 'от т в MYTABLE где Options1? FieldtoCompare: -1 равно Options1? «Условие_1»: 0 и Параметры2? FieldtoCompare: -1 равно Options2? «Условие_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

Да, вы можете. Вы можете связать несколько операций. Таким образом, вы можете написать, как ЗПТ

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

и т.д.

Смежные вопросы