У меня есть таблица armor
, в которой есть три поля для идентификации отдельных дизайнов: make
, model
и version
.
Мне нужно реализовать функцию поиска для нашего программного обеспечения, которая позволяет пользователю искать броню в соответствии с различными критериями, среди которых их дизайн.
Теперь, идея пользователя о дизайне - это одна строка, содержащая объединенные make
, model
и version
, поэтому запись - это одна строка. Допустим, они хотят посмотреть спецификации для марки FH, модели TT, версии 27, они подумают (и наберут) «FHTT27».
Мы используем IQueryOver
объект, к которому мы добавляем последовательные условия в соответствии с критериями. Для дизайна наш код
z_quoQuery = z_quoQuery.And(armor => armor.make + armor.model + armor.version == z_strDesign);
Возникает InvalidOperationException, «переменная« броня »типа« IArmor », на которую ссылаются из области», но она не определена ».
Здесь это описывается как ошибка: https://github.com/mbdavid/LiteDB/issues/637
После долгих проб и ошибок кажется, что синтаксисы, которые не используют переменную armor
, сначала вызывают это исключение.
Очевидно, я должен идти другим путем, по крайней мере сейчас, но после поиска в течение некоторого времени, я не могу найти, как. Я думал об использовании что-то вроде
z_quoQuery = z_quoQuery.And(armor => armor.make == z_strDesign.SubString(0, 2).
And(armor => armor.model == z_strDesign.SubString(2, 2).
And(armor => armor.version == z_strDesign.SubString(4, 2);
К сожалению, поля могут иметь переменную длину. Например, другой набор значений для make
, model
и version
может быть, соответственно, "NGI", "928" и "RX", что приведенный выше код будет анализироваться неправильно. Так что я не могу обойти трудности таким образом. Также я не могу использовать RegEx.
Также я не могу создать свойство в своем классе Armor
, которое объединит все три свойства, поскольку оно не может быть преобразовано в SQL с помощью NHibernate.
У кого-нибудь есть идеи, как это сделать?
Может быть, мне следует использовать явное условие SQL здесь, но как бы оно сочеталось с другими условиями?