Использование инструкции If в Linq to SQL

#linq-to-sql

#linq-to-sql

Вопрос:

У меня есть этот запрос:

 Dim Query = From E In db.Employee Select E
 

Теперь внутри таблицы Employee есть логическое поле под названием «isActive».

если значение isActive равно True, я хочу, чтобы результат показывал, что isActive равно «Active», и то же самое для isActive=false, чтобы показывать неактивный при привязке к gridview »

Комментарии:

1. Я явно пропустил суть вашего вопроса. Ваш комментарий был «если значение isActive равно True, я хочу, чтобы результат показывал, что значение isActive равно «Active», и то же самое для isActive=false, чтобы показывать неактивный при привязке к gridview». Можете ли вы добавить эту информацию в свой вопрос, чтобы сделать его более понятным.

Ответ №1:

Если я правильно понял ваш вопрос, вы хотите отобразить «Активный» или «Неактивный» в вашем gridview, а не «True» или «False» в столбце isActive?

Если это так, я вижу два разных подхода.

Вариант 1:

Вы можете выбрать новый анонимный тип и привязаться к gridview (простите, я не знаю синтаксиса VB, но именно так это было бы сделано в C #):

 Dim Query = From E In db.Employee Select New With _
{ _
    .Id = E.Id, _
    .Name = E.Name, _
    .IsActive = E.IsActive ? "Active" : "Inactive" _
    ' ... all employee fields except IsActive, '
}
 

А затем вы просто привязываете данные, как обычно.

Вариант 2:

Вы позволяете gridview быть немного умнее, чем просто привязываться к свойству isActive. Т.Е. gridview выполнит IsActive ? "Active" : "Inactive" свою роль.

Например, у вас, вероятно, есть что-то вроде этого:

 <asp:BoundField DataField="IsActive" HeaderText="IsActive" />
 

Вместо этого вы можете изменить это на поле шаблона:

 <asp:TemplateField HeaderText="IsActive">
    <ItemTemplate>
        <%# GetIsActiveText((bool)Eval("IsActive")) %>
    </ItemTemplate>
</asp:TemplateField>
 

В кодовом файле вы добавляете метод GetIsActiveText(), который возвращает правильную строку на основе логического значения true / false .

Ответ №2:

 ActiveStr = e.IsActive?"Active":"Inactive" 
 

Ответ №3:

Мне кажется, я понимаю, чего вы пытаетесь достичь. Вам нужно что-то вроде этого:

 Dim Query = From e In db.Employee 
      select
      new
      {
       ID = e.ID,
       ActiveStr = e.IsActive?"Active":"Inactive"
      };
 

Пожалуйста, замените поле «ИДЕНТИФИКАТОР» любыми другими полями, которые вы, возможно, пожелаете показать в запросе, разделенными запятыми.

Ответ №4:

Игнорировать всех , кто рекомендует это условие ? trueBit: синтаксис falseBit, поскольку это только C #. Для VB используйте троичный If (не IIF):

 Dim query = From e In db.Employee  
            Select e.ID, 
                   ActiveStr = If(e.IsActive,"Active","Inactive")