2012-04-24 3 views
0

У меня есть таблица настроить как так:Linq-на-SQL Соединить две колонки, где положение

prefix | value 
ABC  1234 
ABC  5678 
DEF  1234 

Можно ли создать Linq запрос, где префикс и значение сцепляются для сравнения в выражении WHERE ? Я попытался это, но она всегда возвращает пустой набор:

selected = 
      from i in dc.items 
      where i.prefix + i.value == "ABC1234" 
      select i; 

Edit: следующие T-SQL приходит с правильными результатами:

WHERE LTRIM(RTRIM([prefix])) + LTRIM(RTRIM([value])) = 'ABC1234' 

edit2: Следующая, которая объединяет наиболее ответы на приведенные ниже, до сих пор не работает:

where (String.Concat(i.prefix.Trim(), i.value.Trim())) == "ABC1234" 

EDIT3: Так что я получил это работает, но я понятия не имею, почему. Я принял ответ, но если кто-то сообщение, почему это работает, я буду благодарен :)

Это работает (возвращает п строки):

var temp = dc.items.Where(i => i.prefix.Trim() + i.prefix.Trim() == "ABC1234"); 

Это не работает (возвращает 0 строк):

var temp = 
      from i in dc.items 
      where i.prefix.Trim() + i.value.Trim() == "ABC1234" 
      select i; 
+0

Я думаю, что это должно работать. Существуют ли пробелы в значениях (так что конкатенация действительно == "ABC 1234")? – hatchet

+0

Каковы типы данных префикса и значения, являются ли «varchar (n)» или «char (n)»? Если они 'char (n)', они будут содержать пробельные поля. –

+0

Doh они char (n). Я добавил .Trim() для обоих, но это не помогло. – carpat

ответ

4

Я не говорю по-английски. Попробуйте это:

var selected = dc.Where(x => x.prefix + x.value == "ABC1234"); 
+0

Это на самом деле на 100% соответствует тому, что он уже пробовал. – Andreas

+0

Согласен с Andreas – Likurg

+0

Я предполагаю, что «выбран» является общим списком – batressc

0

Попробуйте выбрать этот

selected = 
from c in db.items 

select new { 

Name = string.Format("{0}{1}", c.prefix , c.value) 

}; 

и гляди у вас есть "ABC1234"

1

Предполагая, что value не является строкой, вы могли бы объединить их, как это :

var selected = dc.Items.Where(x => string.Concat(x.prefix, x.value) == "ABC1234"); 

Преимущество использования string.Concat состоит в том, что все аргументы будут преобразованы в строку.

+0

Значение char (n), но я попробовал String.Concat, прежде чем я спросил, не помогло: - \ – carpat

+0

Какой выход? –

+0

var selected = dc.Items.Where (x => string.Concat (x.prefix, x.value) .Contains ("ABC1234")); это другое решение. – caras

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