2015-02-26 2 views
2

У меня есть устаревшая база данных, где мне нужно получить все строки определенного типа. Для поиска этого типа нет столбца, но, к счастью, существует соглашение об именах, которое имеет тире для каждого третьего символа, когда его тип мне нужен. Я думал, что я мог бы просто сделать это:Linq select row, где столбцы nth character = x

var sectionsList = (from sec in db.Query<Section>() 
            where (sec.Name[2] == '-') 
            select sec).ToList().Distinct(); 

Однако я получаю эту ошибку:

An exception of type 'System.NotSupportedException' occurred in NHibernate.dll but was not handled in user code Additional information: Char get_Chars(Int32)

я нашел это, которое выглядит как тот же вопрос: LINQ to Entities does not recognize the method Int32 get_Item(Int32) Но этот случай включает в себя сравнение с локальным значением которые можно схватить перед рукой. Мне нужно перебирать строку Name во время поиска.

ответ

2

Мы должны использовать Substring метод:

var sectionsList = 
    (
    from sec in db.Query<Section>() 
    where sec.Name.Substring(2,1) == "-") 
    select sec 
) 
    .ToList().Distinct(); 

И это должно быть преобразовано в функцию DB, как: substring(NAME, 2, 1) = '-'

+0

Так просто! Спасибо – DBHC

+0

Отлично, если это так или иначе помогло;) Наслаждайтесь отличным NHibernate;) –