2013-04-12 4 views
0

Я участвую в процессе обучения linq для sql.if else condition в LINQ

Можно ли записать следующие условия в linq в sql?

условие 1

var query1 = 
      if 
      from q in db.Students 
      q.fees =="paid" && q.activites == "good" && count == 0 
      select q 

       save "OK" to the property result. 

      else 
      from q in db.Students 
      q.fees =="paid" && q.activites == "good" && count == 2 
      select q 
      save "better" to the property result. 

      else 
      from q in db.Students 
      q.fees =="paid" && q.activites == "good" && count > 2 
      select q 
      save "bad" to the property result. 


    private string _result; 
    public string Result 
    { 
     get { return this._result; ; } 
     set { this._result; = value; } 
    } 

любезно руководство.

Обновлено EDIT:

var query1 =     
      (from q in db.Students 
      q.fees =="paid" && q.activites == "good" 
      select q).Any(); 

    if(count ==0 && query1 == true) 
    { 
    this.Result = "OK" 
    } 
    esle if(count == 2 && query1 == true) 
    { 
    this.Result = "better" 
    } 
    esle 
    { 
    this.Result = "bad" 
    } 

будет ли это подход?

+2

http://stackoverflow.com/questions/15909926/linq-if-else-condition/15909991#_=_ см –

+3

Поскольку это код стороны, почему бы не просто использовать обычный If- else и поместить необходимые запросы linq в эти блоки? – valverij

+0

не могли бы вы дать крошечный пример – user1221765

ответ

1

Поскольку это всего лишь код, вы можете использовать обычный шаблон if-else после запуска запроса LINQ.

Пример:

var query1 =     
     from q in db.Students 
     q.fees =="paid" && q.activites == "good" 
     select q; 

if(count ==0 && query1.Count() > 0) 
{ 
    this.Result = "OK"; 
} 
else if(count == 2 && query1.Count() > 0) 
{ 
    this.Result = "better"; 
} 
else 
{ 
    this.Result = "bad"; 
}  

Поскольку LINQ просто используется, чтобы определить, существуют ли записи, хотя, я бы рекомендовал использовать метод .Any().

var recordsFound = db.Students.Any(q => q.fees =="paid" && q.activites == "good"); 

if(count == 0 && recordsFound) 
{ 
    this.Result = "OK"; 
} 
else if(count == 2 && recordsFound) 
{ 
    this.Result = "better"; 
} 
else 
{ 
    this.Result = "bad"; 
} 
+0

Я собираюсь попробовать и вернуться, спасибо, действительно, за обновление @valverij – user1221765

+0

не могли бы вы объяснить, что означает count()> 0 в данном случае первое решение? – user1221765

+0

Поскольку query1 будет иметь тип 'Enumerable ', '.Count()' просто возвращает количество элементов, содержащихся в коллекции. Если это не ваше намерение, сообщите мне, и я могу обновить ответ. – valverij

0

Похоже, вы всегда запрашиваете на тех же условиях, и единственное, на что вы реагируете условно, - это количество возвращенных результатов. Вы можете просто получить результаты с условием where, а затем поместить результат if в число результатов.

var count = (from q in db.Students 
where q.fees == "paid" && q.activities == "good" 
select q).Count(); 

if(count == 0){ 
    //do something 
} 
else if(count == 2){ 
    //do something 
} 
///etc... 
+0

Pls видит мои комментарии выше, я уже пробовал это, и он отлично работает с count. У меня проблема при сравнении count & query1. – user1221765