Я создал класс-оболочку, в которой хранятся статические функции для всех ваших типичных Запросы LINQ, например, где, firstordefault и т. д. Пример ниже:
Код: Выделить всё
public abstract class QueryableTable where T : QueryableTable, new()
{
public static Func QueryInitializer;
public static List Where(Expression predicate, bool eagerLoad = false)
{
using (var context = new DatabaseContext())
{
return QueryInitializer(context, eagerLoad).Where(predicate).ToList();
}
}
}
Код: Выделить всё
[Table("comment")]
public class Comment : QueryableTable
{
[Key]
public int Id { get; set; }
public int PersonId { get; set; }
// Navigation property
public Person Person { get; set; }
static Comment()
{
QueryableTable.QueryInitializer = (context, eagerLoad) =>
{
return eagerLoad ?
context.Set().Include(t => t.Person) as IQueryable :
context.Set();
};
}
}
Все это имеет смысл, но я Сначала я пытаюсь найти элегантный способ вызова статического конструктора перед статическим методом, а во-вторых, я пытаюсь убедить себя, что этот дизайн будет полезен на практике из-за простоты запроса через статический Class.Where( ), делать эти методы статическими нецелесообразно.
Подробнее здесь: https://stackoverflow.com/questions/790 ... in-c-sharp
Мобильная версия