ПРИМЕЧАНИЕ: весь код написан в верхней части моей головы. Может содержать некоторые ошибки. Просто получите общий смысл этого вопроса)
Принимая это определение класса:
(уменьшено для простоты)
public class CodedValue
{
public string Code { get; set; }
public string Value {get; set; }
}
Взятие этих предметов:
CodedValue cv1 = new CodedValue(){ Code = "A", Value = "1" };
CodedValue cv2 = new CodedValue(){ Code = "B", Value = "2" };
IList<CodedValue> cvList = new List<CodedValue>();
cvList.Add(cv1);
cvList.Add(cv2);
cvList содержит список CodedValue для фильтрации.
Предположим, что моя база данных содержит эти записи:
CODE VALUE
A 1
A 2
B 1
B 2
Теперь я хочу получить все объекты с кодовым значением в списке
var filter = from o in MyRepository.List()
where cvList.Contains(o.CodedValue)
select o;
NHibernate перевести этот Linq к этому:
select [Fields...] from [Table...]
where Code in ('A', 'B') and Value in ('1', '2');
Это неправильно. Если вы посмотрите на мой пример записей, этот SQL вернет все строки. SQL должен быть переведен на:
select [Fields...] from [Table...]
where (Code = 'A' and Value = '1') or (Code = 'B' and Value = '2');
Итак, могу ли я получить желаемый результат с помощью Linq? Если так, то как? Если нет, то как мне этого добиться?
Спасибо