Я пытаюсь создать оператор Linq, который запрашивает оба столбца, которые существуют на моем объекте, как свойства, и те, которые не существуют, но существуют как столбцы в базе данных для объекта.
Например, у меня есть коллекция сущностей Книги. Каждая книга имеет свойство ID и Title и соответствующий столбец в базе данных. Но, допустим, таблица для Book также содержит поле столбца для Author , а у моей сущности Book этого нет.
Обычный запрос с идентификатором и названием может выглядеть следующим образом:
Books.Where(b=>b.ID == 123 && b.Title == "Title")
Но я также хочу динамически добавить эквивалент " AND Author = 'Name' " к вышеуказанному запросу. Свойство Author не существует в объекте Book.
Дополнительные поля и значения, которые они должны содержать, будут фактически доступны в Словаре. Поэтому мне нужно будет динамически добавить в запрос несколько AND [FieldName] = '[Value]' условий.
Это может помочь объяснить, почему мне нужно это знать, что я использую хранилище таблиц Azure и переопределил сериализацию, которая превращает сущность Book в XML, хранящийся в Azure.
Редактировать -
Я пытался использовать библиотеку Dynamic Linq, но она не работает.
Books.Where(b=>b.ID == 123 && b.Title == "Title").Where("Author = @0", "SomeName").ToList();
Выдает:
System.Linq.Dynamic.ParseException: Нет свойства или поля «Автор» в типе «Книга».
Кроме того,
Я знаю, что использование Books.AddQueryOption ("$ filter", "Author eq 'SomeName'") работает, когда используется само по себе. Но я понятия не имею, как использовать AddQueryOption вместе с существующим оператором Where.