У меня есть этот метод, который работает в .NET 4.8:
Код: Выделить всё
private async Task someMethod(PropertyInfo propModel, string ident, string text, string val) {
Type nestedModel = propModel.PropertyType;
DbSet nestedModelDbset = db.Set(nestedModel);
PropertyInfo propIdent = nestedModel.GetProperty(ident);
var nestedItem = await nestedModelDbset.Where(propIdent.Name + "== @0", val).Take(1).ToListAsync();
var nestedInstance = nestedItem.First();
PropertyInfo propToShow = nestedModel.GetProperty(text);
string valToShow = (propToShow.GetValue(nestedInstance)).ToString();
return valToShow;
}
Любая помощь?
ОБНОВЛЕНИЕ
Хорошо, судя по комментариям, я постараюсь дать больше информации...
По сути, это состоит из двух частей: первая — получение правильного набора баз данных, вторая — запрос к нему для получения желаемого значения.
Для второй части :
Код: Выделить всё
.Where(propIdent.Name + "== @0", val)
(проверьте [https://www.nuget.org/packages/System.L ... amic.Core/][1])
(извините, это старый проект, и я даже не знал, что он использует дополнительные nugets)< /p>
Похоже, что nuget также работает для .NET Core, поэтому я установил его в новый проект, и теперь эта часть кода не показывает ошибок... но я не могу знать наверняка, так ли это будет работать до тех пор, пока у меня не заработает первая часть (получение набора баз данных)...
ОБНОВЛЕНИЕ 2
ок Клянусь, я потерял на это часы, а после публикации здесь я решил проблему за считанные минуты. О боже...
и наконец:
1.- установите nuget
System.Linq.Dynamic.Core
2.- добавил этот метод из этот другой ответ SO: https://stackoverflow.com/a/59496444
Код: Выделить всё
public static IQueryable Set(this DbContext context, Type T)
{
var method = typeof(DbContext).GetMethods().Single(p =>
p.Name == nameof(DbContext.Set) && p.ContainsGenericParameters && !p.GetParameters().Any());
// Build a method with the specific type argument you're interested in
method = method.MakeGenericMethod(T);
return method.Invoke(context, null) as IQueryable;
}
Код: Выделить всё
private async Task someMethod(PropertyInfo propModel, string ident, string text, string val) {
Type nestedModel = propModel.PropertyType;
//DbSet nestedModelDbset = db.Set(nestedModel);
IQueryable nestedModelDbset = db.Set(nestedModel);
PropertyInfo propIdent = nestedModel.GetProperty(ident);
var nestedItem = await nestedModelDbset.Where(propIdent.Name + "== @0", val).Take(1).ToListAsync();
var nestedInstance = nestedItem.First();
PropertyInfo propToShow = nestedModel.GetProperty(text);
string valToShow = (propToShow.GetValue(nestedInstance)).ToString();
return valToShow;
}
Мне нравится этот сайт XD
Подробнее здесь: https://stackoverflow.com/questions/782 ... t6-efcore6