Przekazywanie części wyrażenia LINQ przez argument metody

0

Mam kolekcje MongoDB o nazwie File, ktore zawiera atrybut UploadedAt. Chcę wyciągnąć z tej kolekcji dane z pewnego przedziału czasowego. Robię to tak mniej więcej tak:

files
    .Find(f => f.UploadedAt > DateTime.Now.AddDays(-1) && f.UploadedAt <= DateTime.Now)
    .ToList();

Teraz chciałbym mieć możliwość napisania metody użytkowej, która pozwoli mi na pobranie danych według kryteriów opartych o dowolne atrybut (a nie tylko o UploadedAt). Próbowałem tak:

public List<Domain.File.File> SomeMethod(
            IMongoCollection<Domain.File.File> collection, 
            Func<Domain.File.File, DateTime> field)
{
    return collection
        .Find(f => field(f) > DateTime.Now.AddDays(-1) && f.UploadedAt <= DateTime.Now)
        .ToList();
}

Kompiluje się, ale podczas wywołania metody w następujący sposób:

SomeMethod(_collections.Files, f => f.UploadedAt);

Dostaję wyjątek:

MongoDB.Driver.Linq.ExpressionNotSupportedException: Expression not supported

Czy istnieje jakiś sposób na to żeby osiągnąć zamierzony cel?

2

EE to musisz Expression budować dynamicznie. Czyli coś co zwraca expression ma zwrócić: Expression<Func<File,bool>>. Czyli twoje expression factory dostaje dane, nazwe pola i buduje dynamicznie całość

1 użytkowników online, w tym zalogowanych: 0, gości: 1