Попытка фильтрации по типу Nullable с помощью деревьев выражений
Я вставил все мое тестовое приложение ниже. Это'довольно компактный, поэтому я надеюсь, что этоне проблема. Вы должны иметь возможность просто вырезать и вставить его в консольное приложение и запустить его.
Мне нужно иметь возможность фильтровать один или несколько объектов Person свойства, и я нене знаю, какие из них до времени выполнения. Я знаю, что это обсуждалось повсеместно, и я изучил и использую такие инструменты, какPredicateBuilder & Динамическая библиотека Linq но обсуждение вокруг них имеет тенденцию сосредотачиваться больше на сортировке и упорядочении, и каждый из них боролся со своими проблемами, сталкиваясь с типами Nullable. Поэтому я подумал, что постараюсь создать хотя бы дополнительный фильтр, который бы учитывал эти конкретные сценарии.
В приведенном ниже примере я пытаюсь отфильтровать членов семьи, которые родились после определенной даты. Дело в том, что поле DateOfBirth на фильтруемых объектах является свойством DateTime.
Последняя ошибка, которую я получаю,
Оператор приведения между типами не определенSystem.String» а также 'System.Nullable`1 [System.DateTime].
В чем проблема. Я пытался использовать несколько разных способов приведения и конвертации, но с разной степенью неудачи. В конечном итоге это будет применено к базе данных EF, которая также отказывается от методов преобразования, таких как DateTime.Parse (-).
Любая помощь будет принята с благодарностью!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List people = new List();
people.Add(new Person { FirstName = "Bob", LastName = "Smith", DateOfBirth = DateTime.Parse("1969/01/21"), Weight=207 });
people.Add(new Person { FirstName = "Lisa", LastName = "Smith", DateOfBirth = DateTime.Parse("1974/05/09") });
people.Add(new Person { FirstName = "Jane", LastName = "Smith", DateOfBirth = DateTime.Parse("1999/05/09") });
people.Add(new Person { FirstName = "Lori", LastName = "Jones", DateOfBirth = DateTime.Parse("2002/10/21") });
people.Add(new Person { FirstName = "Patty", LastName = "Smith", DateOfBirth = DateTime.Parse("2012/03/11") });
people.Add(new Person { FirstName = "George", LastName = "Smith", DateOfBirth = DateTime.Parse("2013/06/18"), Weight=6 });
String filterField = "DateOfBirth";
String filterOper = "