Сначала либо определить базовый класс, они оба получают из, или они оба интерфейса реализации. Я собираюсь предположить, что здесь реализуется интерфейс IColoured
с свойством Colour
. (Хотя я буду замечать, что в именах участников обычно используется en-US, поэтому цвета представлены свойством Color
).
Так, что ваш класс автомобилей был создан EF как:
namespace SomeNamespace
{
public partial class Cars
{
/*…*/
public string Colour { get; set; }
/*…*/
}
}
Тогда вы можете иметь файл с:
namespace SomeNamespace
{
public partial class Cars : IColoured
{
}
}
Поскольку два partial
части кода объединены в составлении определение класса вашего кода просто необходимо указать, что интерфейс реализован, тот факт, что свойство соответствия находится в другом файле, не имеет значения.
Тогда:
public static IQueryable<T> FilterByColour<T>(this IQueryable<T> source, string colour)
where T : IColoured
{
return source.Where(p => p.Colour == colour);
}
Теперь вы можете использовать _Entities.Cars.FilterByColour("white")
, _Entities.Bikes.FilterByColour("blue")
и т.д.Если фильтрация по "white"
был особенно распространен случай, то либо:
Важно: Никогда не определяют такой метод, принимая IEnumerable<>
, если у вас нет уважительной причины для (например, используя что-то, что не совместимо с EF), используйте IQueryable<>
, так что он все еще обрабатывается EF и может быть отфильтрован по базе данных, а не иметь все извлеченное из базы данных и отфильтрованное в вашем приложении.
public static IQueryable<T> FilterWhite<T>(this IQueryable<T> source)
where T : IColoured
{
return source.FilterByColour("white");
}
Или, если у вас не было никакого другого использования для FilterByColour затем:
public static IQueryable<T> FilterWhite<T>(this IQueryable<T> source)
where T : IColoured
{
return source.Where(p => p.Colour == "white");
}
будет работать.
Да, но мне нужен тип возврата из GetWhiteVehicles, который будет List, Lis и т. Д. –
user441365
Они такого типа, это не просто указано. Просто определите переменные явно: List result = GetWhiteVehicles (_Entities.Cars) .ToList(); или добавить ToList() внутри функции –
LInsoDeTeh
еще одна вещь. мои классы действительно генерируются из Entity Framework. Что вы имеете в виду с добавлением нового исходного файла? – user441365