Я играл с несколькими техниками, но все еще не нашел то, чем я доволен.
Если я сделаю что-то вроде;
IQueryable<TestClass> tests = new MyDbContext()
.LdbRecords
.Select(r => new TestClass() { Id = r.RecordId, Name = r.RecordName });
Console.WriteLine(tests.Count());
EF выполняет относительно разумный запрос;
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[ldb_record] AS [Extent1]
) AS [GroupBy1]
Я пытаюсь отойти от использования конструкторов без параметров. Основная цель заключается в том, чтобы при добавлении нового свойства нам не приходилось искать слишком много для обновления каждого экземпляра, в котором обновляется класс. Вместо этого мы модифицируем конструктор, и тогда он будет ломать любые фрагменты кода, обновляющие класс, пока не будет добавлен дополнительный параметр (гарантируя, что мы не забудем добавить отображение нового свойства в любом месте). Если есть лучший способ сделать это, я весь слух!
Конструктор выглядит так:
public TestClass(int id, string name)
{
Id = id;
Name = name;
}
Каждая техника, которую я нашел до сих пор, например;
IEnumerable<TestClass> tests = new MyDbContext()
.LdbRecords
.AsEnumerable()
.Select(r => new TestClass(r.RecordId, r.RecordName));
Console.WriteLine(tests.Count());
оказывает пагубное влияние на генерацию SQL-запроса;
SELECT
[Extent1].[record_id] AS [record_id],
[Extent1].[record_name] AS [record_name],
[Extent1].[record_note] AS [record_note]
FROM [dbo].[ldb_record] AS [Extent1]
Есть ли метод, который я могу использовать (возможно, с использованием делегатов, выражений или функций?), Который позволит мне использовать мой конструктор TestClass
без перечисления?
Я был бы рад иметь частный конструктор без параметров в TestClass, который функция / делегат и т. Д. Могли бы вызывать?
Спасибо