У меня возникли проблемы с созданием универсального репозитория mongodb (моя коллекция сделана как GenericRepositoryEntry)
public static void SaveRepositoryEntry<TDataObject>(
TDataObject msg,
Func<GenericRepositoryEntry<TDataObject>, bool> finder01,
Expression<Func<GenericRepositoryEntry<TDataObject>, bool>> finder02,
Func<GenericRepositoryEntry<DataValue>, bool> finder03,
Expression<Func<GenericRepositoryEntry<DataValue>, bool>> finder04)
where TDataObject : DataValue
{
using (var ctx = new MongoContext())
{
IMongoQueryable<GenericRepositoryEntry<DataValue>> iQuery = ctx.DataValues.AsQueryable();
var items01 = iQuery.Where(x => finder01(x)).ToList(); //compile error
var items02 = iQuery.Where(finder02).ToList(); //compile error
var items03 = iQuery.Where(x => finder03(x)).ToList();
var items04 = iQuery.Where(finder04).ToList();
}
}
это класс коллекции репо
public class GenericRepositoryEntry<T>
{
[BsonId(IdGenerator = typeof(CombGuidGenerator))]
public Guid Id { get; set; }
public T DataObject { get; set; }
public DateTime LastEditDate { get; set; }
public bool ActualFlag { get; set; }
}
items01:
cannot convert from 'GlobalElectricGateway.Core.Model.MongoEntry.GenericRepositoryEntry<GlobalElectricGateway.Core.Model.Ocpp.DataValue>' to 'GlobalElectricGateway.Core.Model.MongoEntry.GenericRepositoryEntry<TDataObject>'
items02:
cannot convert from 'System.Linq.Expressions.Expression<System.Func<GlobalElectricGateway.Core.Model.MongoEntry.GenericRepositoryEntry<TDataObject>, bool>>' to 'System.Linq.Expressions.Expression<System.Func<GlobalElectricGateway.Core.Model.MongoEntry.GenericRepositoryEntry<GlobalElectricGateway.Core.Model.Ocpp.DataValue>, int, bool>>'
items03 и items04
в порядке... потому что я не использую универсальный тип: (
я получаю ошибку компиляции на items01 / items02, похоже, что она игнорирует - where TDataObject : DataValue
также пытается изменить сигнатуру метода SaveRepositoryEntry как
where TDataObject : IMongoEntryDataItem
и изменение repoEntryClass
public class GenericRepositoryEntry<T>
where T: IMongoEntryDataItem