У меня есть Linq к SQL следующим образом:Linq к Sql графу Включает присоединяется
var members=db.Members.Include(x=> x.Contact).Count();
Теперь из-за некоторые плохие данные всех контактов в членах моих нет соответствующего контакт записи. Итак, во время подсчета, как я могу включить граф после Inner Join в таблицу контактов.
Проблема заключается в том, когда я получить список членов, список членов имеет 100 записей, в то время как граф имеет 150 записей (50 записей Неуспехи данных).
var membersQ=db.Members.Include(x=> x.Contact).Select(i=> new MemberViewModel(){
Name = i.Contact.Name,
ContactId= i.Contact.Id,
CreatedDate= i.CreatedDate
}).AsQueryable();
var members=memberQ.ToList();// =100,paging is done...
// the memebers list uses paging but the count doesn't
var total=membersQ.Count(); // =150
Я проверил Результирующий запрос во время подсчета голосов, по-видимому, он не делает JOIN
с контактным столом, а Count()
Update структура базы данных
Member Table
Id ContactId, CompanyId, CreatedDate ...
Contact Table
Id Name ...
Внешний ключ, для ContactId в Таблица участников не задана на уровне базы данных, а только на модели.
[ForeignKey("ContactId")]
Public Contact Contact { get; set; }
Плохие данные поступают как этот
я был ранее 1,2,3,4,5,6,7,8,9,10 в качестве контактных записей и все эти контакты были в таблице членами слишком.
Теперь я удалил записи из таблицы контактов, скажем, 6-10. Но не удалялось из таблицы Member.
Так что это вызывает проблему со счетом. Я уверен, что удаление плохих данных от Member решает проблему, но вопрос в том, как использовать join while using Count()
.
Примечание: Я использую инициализатор базы данных нулевой
Update 2 Я LINQPad и пытался как по умолчанию Linq To SQL
и EntityFramework
соединение (DbContext) и то, что я нашел это сбивает с толку.
Для запроса:
(from a in Members
join b in Contacts on a.ContactId equals b.ContactId
select a).Count()
Использование по умолчанию Linq To SQL
SELECT COUNT(*) AS [value]
FROM [Member] AS [t0]
INNER JOIN [Contact] AS [t1] ON [t0].[ContactID] = [t1].[ContactID]
Использование Entityframework DbContext
SELECT
[GroupBy1].[A1] AS [C1]
FROM (SELECT
COUNT(1) AS [A1]
FROM [dbo].[Member] AS [Extent1]
) AS [GroupBy1]
В моем коде я использую метод DbContext. Итак ... не знаю, что делать здесь . кстати: Извините за то, что тег с linq-to-sql
это на самом деле entityframework
просто для удовольствия. пытаться. memberQ.Contacts.Count() (это должно быть 100) –
Так что мне придется использовать другой запрос, который выбирает 'Contact', чем тот, который используется для' ToList'? – Ruchan