Я хочу проанализировать запросы Entity Framework Core, , которые я скопировал из существующего кода в LinqPad, как
UserQuery this_context;
void Main()
{
this_context = this;
var validationResult = (
from ProjectInfo pi in this_context.GetAll<ProjectInfo>()
join GeneralInformation gi in this_context.GetAll<GeneralInformation>()
on pi.Id equals gi.Id into gpi
from gps in gpi.DefaultIfEmpty()
select new { ... }).ToList();
}
Я знаю, что Linqpad не поддерживает .NET Core, поэтому мне нужно немного его настроить - для этого я создал метод Extension следующим образом:
public static class Ext
{
public static IEnumerable GetAll<T>(this UserQuery uq)
where T: new()
{
return GetAll(uq, new T());
}
private static IEnumerable GetAll<T>(this UserQuery uq, T a)
{
switch (a)
{
case ProjectInfo v:
return uq.ProjectInfo.Select(s => s);
case GeneralInformation v:
return uq.GeneralInformation.Select(s => s);
// ... many more cases like the above
default: // unknown type
throw new TypeAccessException($"Unsupported type {a.GetType().FullName}");
}
}
}
Перегруженная функция GetAll
необходима для получения типа - она просто создаетпустой новый объект и передает его так, чтобы оператор switch мог правильно вывести правильный тип и вернуть правильный запрос.
Это прекрасно работает, но это много усилий , чтобы поставитьв каждом отдельном типе в операторе switch.
Итак, мой вопрос:
Как этого можно достичь более разумным способом, то есть без необходимости указывать каждую отдельную сущностьтипа