2015-09-04 4 views
0

Я пытаюсь что-то сделать с Linq, где мне могут понадобиться все элементы, или мне может понадобиться подмножество элементов. Это будет основано на nullable int (int?).Linq эквивалент ColumnName = @Param или @Param IS NULL

В SQL я хотел бы сделать:

SELECT Column1, Column2, Column3 
FROM dbo.MyTable 
WHERE Column1 = @Param1 OR @Param1 IS NULL 

Могу ли я сделать что-то подобное в LINQ?

+2

Вы уверены, что вы хотите проверить 'ли @ Param1' является недействительным? Это проверка ввода вашего запроса, поэтому вы должны сделать это * до * запуска запроса. – poke

ответ

0

Я предполагаю, что вы на самом деле означает

select col1, col2, col3 
FROM dbo.MyTable 
WHERE Column1 = @Param1 OR Column1 = null 

Если да, то это запрос вар результат = от х в MyTable где (x.Column1 == NULL) || (x.Column1 == param1) выберите x;

Или вы хотите выбрать все, когда оно равно нулю?

Затем запускать различные запросы

if(param1.IsNull()) 
{ 
    result = from x in MyTable 
     select x; 
} 
else 
{ 
    result = from x in MyTable 
     where x.Column1 == param1 
     select x; 
} 

Да, я не добавил столбцы, но логика звук.

0

Вы не указали какой-либо код C#, поэтому я не знаю о ваших сущностях, но если вы используете EF, вы должны получить сущность с именем MyTable. Также следующий запрос linq возвращает анонимный тип, который вы захотите заменить классом.

Предполагая, что имя переменной параметра Param1 является Param1, а dbContext - это ваш объект DataContext, код linq должен выглядеть так.

var result = from t in dbContext.MyTable 
where Param1 = null or t.Column1 = Param1 
select new { 
    Column1 = t.Column1, 
    Column2 = t.Column2, 
    Column3 = t.Column3 
}; 
0

Вы можете создать свой запрос в несколько этапов:

var query = table.Select(x => new {x.Column1, x.Column2, x.Column3}); 

if (param.HasValue) 
    query = query.Where(x => x.Column1 == param.Value); 
Смежные вопросы