Работая с руководством по инфраструктуре сущностей для ядра .net, я заметил, что при просмотре доступных методов для DbSet в приведенном ниже коде после вставки с использованием System.Linq; они сильно отличались от предыдущих .
Код: Выделить всё
private static void SimpleSamuraiQuery()
{
using (var context = new SamuraiContext())
{
var samurais = context.Samurais. // Add(), Remove(), etc..
}
}
После включения оператора using я внезапно смог увидеть все методы Linq, которые вы ожидали увидеть, но это вызвало у меня небольшое любопытство, поэтому я решил проверьте класс DbSet, нажав F12:
Код: Выделить всё
public abstract class DbSet : IQueryable, IEnumerable, IEnumerable, IQueryable, IAsyncEnumerable, IInfrastructure, IListSource where TEntity : class
Я заметил, что он реализует интерфейс System.Linq.IQueryable, но в самом классе DbSet не объявлен ни один из методов Linq. Мне это кажется немного странным, но я решил копнуть глубже и проверить интерфейс IQueryable:
Код: Выделить всё
namespace System.Linq
{
//
// Summary:
// Provides functionality to evaluate queries against a specific data source wherein
// the type of the data is known.
//
// Type parameters:
// T:
// The type of the data in the data source.
public interface IQueryable : IEnumerable, IEnumerable, IQueryable
{
}
}
Что за фигня? Простите за мой французский, но что здесь происходит? Почему при написании с использованием System.Linq кажется, что в класс «вводится» больше методов, и почему интерфейс кажется пустым?
Подробнее здесь:
https://stackoverflow.com/questions/597 ... er-classes