#c# #linq #join
#c# #linq #Присоединиться
Вопрос:
У меня есть 3 таблицы User, HumanCustomer, CompanyCustomer Я хочу объединить таблицы с помощью LINQ, но мой запрос не работает, и он возвращает null
Запрос:
var query = (from users in _ctx.Users
join hCustomer in _ctx.HumanCustomers on users.Id equals hCustomer.UserId
join cCustomer in _ctx.CompanyCustomers on users.Id equals cCustomer.UserId
select new
{
users.Id,
users.Mobile,
hCustomer.LastName,
hCustomer.Name,
cCustomer.CompanyName
});
foreach (var item in query)
{
AllCustomerViewModel allCustomer = new AllCustomerViewModel();
if (item.Name != null)
{
allCustomer.UserId = item.Id;
allCustomer.FullName = item.Name item.LastName;
allCustomer.Mobile = item.Mobile;
Customer.Add(allCustomer);
}
}
Код не вводится для каждого
Я думаю, что проблема заключается в использовании идентификатора пользователя дважды, потому что, когда я удаляю
join cCustomer in _ctx.CompanyCustomers on users.Id equals cCustomer.UserId
запрос выполняется правильно.
Комментарии:
1. Не уверен в данных, но да, вам, вероятно, нужно использовать таблицу пользователя дважды, но псевдоним с другим именем
2. Как использовать? @Brad
3. возможно, ваша таблица CompanyCustomers пуста, или столбец ‘userId’ имеет нулевое значение. Вы можете проверить?
4. Что происходит, когда вы пишете этот запрос в редакторе sql? Вероятно, какое-то поле равно нулю, и из-за этого результат равен нулю.
5. Проверьте свои данные в таблицах, убедитесь, что все 3 таблицы содержат одинаковое значение идентификатора пользователя
Ответ №1:
Возможно, ваша проблема заключается в динамической переменной, которую вы пытаетесь повторить.
Вы могли бы попробовать:
foreach (dynamic item in query)
В качестве альтернативы, вы пишете класс для хранения выбранных вами значений, обновляя начало вашего запроса до:
var query = (from users in _ctx.Users
join hCustomer in _ctx.HumanCustomers on users.Id equals hCustomer.UserId
join cCustomer in _ctx.CompanyCustomers on users.Id equals cCustomer.UserId
select new MyClass
{
Id = users.Id,
Mobile = users.Mobile,
LastName = hCustomer.LastName,
Name = hCustomer.Name,
CompanyName = cCustomer.CompanyName
});
Ответ №2:
you can try this way..
var query = (from users in _ctx.Users
join hCustomer in _ctx.HumanCustomers on users.Id equals hCustomer.UserId
join cCustomer in _ctx.CompanyCustomers on users.Id equals cCustomer.UserId
select new
{
Id = users.Id,
Mobile = users.Mobile,
LastName = hCustomer.LastName,
Name = hCustomer.Name,
CompanyName = (cCustomer == null ? "" : cCustomer .CompanyName)
});
Комментарии:
1. каким образом этот ответ помогает?