2013-11-27 4 views
0

Вот мой запрос sql sql, но я не могу преобразовать его в linq, поскольку он содержит случаи, основанные на where, любая помощь будет оценена.sql case statement в where where в linq

if (StrClientID.Equals("008")) 
        objdbhims.Query += " and ((case when t.external_org is null then d.clientid='008' end) or t.external_org in ('008','-1'))"; 
       else if (StrClientID.Equals("006")) 
        objdbhims.Query += " and (t.external_org<>'008' or (case when t.external_org is null then d.clientid='" + StrClientID + "' end))"; 
       else 
        objdbhims.Query += " and d.clientid='"+StrClientID+"'"; 
+0

вы можете использовать тернарный оператор '? : <значениеiffalse> 'в linq –

+0

@ Реферат дела RaphaëlAlthaus заменяет, если else, но в тройном операторе, когда я делаю ? и я не помещаю другую часть, это дает синтаксическую ошибку, я не хочу еще часть, как это сделать/ –

+0

ну, вы можете просто поместить что-то вроде 'm => true' во вторую часть, затем ... –

ответ

-1

Я решил это сам после того, как изо всех сил много с этим решением, используя тройной оператор, я просто положить 1 == 1 в еще части, чтобы избавиться от ошибки:

string[] arr = new string[] {"008","-1"}; 

string ClientID = HttpContext.Current.Session["ClientID"].ToString(); 

&& (
           ClientID == "008" 
          ? (t.external_org == null 
               ? d.clientid =="008" : 1 == 1) 
               || (arr.Contains(t.external_org)) 


           : ClientID == "006" 
          ? (t.external_org == null 
               ? d.clientid == ClientID : 1 == 1) 
               || (t.external_org != "008") 

         : d.clientid == ClientID 
          ) 
+0

@ Dmytro is это нормально? –

0

Вы можете добавить много предложений Where к вашему объекту IQueryable перед извлечением данных из БД. Например:

var data = SomeContext.MyTable.Where(x => x.SomeField == someValue); 
if (someCondition) 
{ 
    // Something like your 1st if clause 
    data = data.Where(x => (x.SomeField2 != null && x.SomeField3 == "someText") || new[] { "001", "002" }.Contains(x.SomeField2)); 
} 

var result = data.ToList(); 
+0

как сделать эту часть? .... случай, когда t.external_org имеет значение null, тогда d.clientid = '008' end) или t.external_org in ('008', ' -1 ')) " –

+0

это проверка на значение столбца таблицы, и на основании этого я добавляю, где d.clientid =" 008 " –

+0

Это зависит от вашего отношения между t и d таблицами в Linq. Если, например, d является клиентом, а t имеет свойство типа Client, то вы можете написать t.Client.clientid == «008». Если t имеет список клиентов (-ов), и вы хотите получить все t записей, где t.Clients имеет некоторый клиент с определенным идентификатором, вы можете написать это - t.Clients.Any (y => y.clientid == "008") –