2016-02-03 2 views
1

У меня есть таблица с пятью столбцами. Только один из первых четырех столбцов будет иметь значение, а другое будет равно нулю, и мне нужно получить это ненулевое значение из строки таблицы с проверкой пятого столбца. Ниже оператора sql работает нормально в соответствии с моим требованием. Но мне нужно сделать то же самое с помощью LINQ. Пожалуйста, предложите, как я могу добиться того же, используя LINQ? или эквивалентную инструкцию LINQ?Эквивалентная инструкция LINQ к оператору SQL

SELECT 
    CASE 
     WHEN col1 is not null THEN col1 
     WHEN col2 is not null THEN col2 
     WHEN col3 is not null THEN col3 
     WHEN col4 is not null THEN col4 
    END 
FROM MyTable where col5 ='abc' 
+0

Я не думаю, что даже ваш SQL работает так, как есть. Это не то, как вы пишете SQL для этой цели. 'SELECT COALESCE (col1, col2, col3, col4) AS COL FROM MyTable, где col5 = 'abc'' –

+0

Попробуйте сделать это с помощью' .Where (x => x.col5 == "abc"). Выберите (x = > x.col1 ?? x.col2 ?? x.col3 ?? x.col4) ' –

ответ

3

Первое, что необходимо сначала. Ваш код неверен. Это должно быть SELECT COALESCE(col1,col2,col3,col4) AS COL FROM MyTable where col5 ='abc'.

var myObj = db.MyTable.Where(s => s.Col5 == 'abc').Select(s=> new {COL = s.col1??s.col2??s.col3??s.col4??"" }) 
+0

Просто упомянуть:' COALESCE (col1, col2, col3, col4) '- это короткая форма вопроса в вопросе. См. [Здесь] (https://msdn.microsoft.com/en-us/library/ms190349 (v = sql.120) .aspx). –

+0

@diiN_ Проблема в том, как он написал это, а не в заявлении case. Он должен был 'ВЫБРАТЬ СЛУЧАЙ КОГДА col1 не является нулевым ТОГДА col1 КОГДА col2 не равно нулю ТОГДА col2 КОГДА col3 не пусто ТОГДА col3 ELSE COL4 END AS COL ИЗ MyTable где abc'' col5 = ' –

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