CHill60
Во-первых, в моей копии базы данных Northwind, загруженной непосредственно из MSDN, таблицы называются Employees
, Orders
и Customers
Важно быть точным.
Таблицы могут быть запрошены с помощью соединений - эта статья CodeProject объясняет различные типы соединений Визуальное представление SQL-соединений[^]
Потому что вы пытаетесь предел возвращенная информация - "все сотрудники, у которых есть клиенты" подразумевает "не показывайте сотрудников, у которых есть клиенты". нет есть клиенты", Ан INNER JOIN
было бы уместно-обратитесь к статье, чтобы узнать почему.
На самом деле вам не нужно объединять все три таблицы, потому что если вы посмотрите на сценарий создания заказов таблиц, то увидите
...
[CustomerID] [nchar](5) NULL,
...
ALTER TABLE [dbo].[Orders] WITH NOCHECK ADD CONSTRAINT [FK_Orders_Customers] FOREIGN KEY([CustomerID])
REFERENCES [dbo].[Customers] ([CustomerID])
GO
ALTER TABLE [dbo].[Orders] CHECK CONSTRAINT [FK_Orders_Customers]
GO
(В SQL Server Management Studio, Если вы щелкните правой кнопкой мыши на имени таблицы в окне обозревателя объектов, выберите "Script table as", затем "CREATE to", а затем "New Query Editor Window", вы можете получить информацию, вставленную выше).
Это в основном означает, что если вы включаете значение для
CustomerID
на
Orders
стол потом он
должен существуют как
CustomerID
на
Customers
таблица, в противном случае этот столбец будет содержать
NULL
.
Итак, чтобы просто перечислить сведения о сотрудниках, которые появляются в таблице заказов:
Select E.LastName, E.FirstName, E.Title
FROM Orders O
INNER JOIN Employees E ON O.EmployeeID = E.EmployeeID
WHERE CustomerID IS NOT NULL
Это происходит точно так же, как и включение
Customers
на другой
INNER JOIN
т.е.
Select E.LastName, E.FirstName, E.Title
FROM Orders O
INNER JOIN Employees E ON O.EmployeeID = E.EmployeeID
INNER JOIN Customers C ON O.CustomerID = C.CustomerID
Опять же, если вы посмотрите на изображения в этой статье, вам станет ясно, почему.
Перевод этого на MVC, Linq или что-то еще, что вы пытаетесь сделать, остается для вас упражнением, поскольку вы не предоставили мне достаточно информации (и усилий), чтобы помочь вам в этом.
ddgjgj
Во-первых, мы предполагаем, что у каждого заказа есть клиент, поэтому, если у сотрудника есть заказ, у него также должен быть клиент. Таким образом, мы можем забыть о клиентском столе. Мы действительно просто хотим знать, какие сотрудники имеют заказы. Для этого мы просматриваем заказы и собираем список сотрудников, которые ими владеют:
(от О в приказах
выберите o.Работника).Отчетливый()
Так что это часть того, как выглядит вид:
@модель Нортвинд.Работники
@{
Видовая сумка.Title = " Я";
Layout = " ~ / Views / Shared/MasterDetailsLayoutPage.cshtml";
}
@HTML-код.DisplayNameFor(модель =&ГТ; модель.столбец EmployeeID)
@HTML-код.DisplayFor(модель =&ГТ; модель.столбец EmployeeID)
........И НЕКОТОРЫЕ ДРУГИЕ СОТРУДНИКИ ПОЛЯ....
Тогда вот выведите таблицу:
foreach(элемент в модели.Клиенты)
..... отобразите таблицу клиентов для этого сотрудника(пример EMPLOYEEID: 5).
А это контролер :
dbNorthwindEntities db = новые dbNorthwindEntities();
// GET: тест
/* public ActionResult Details()
{
// запрос приходит сюда
возвращение смотреть();
}*/
Можете ли вы поправить меня или помочь мне с этим сейчас ? Я действительно очень ценю ваше объяснение выше, я был как "вау"!
CHill60
Запрос будет более простым
Select E.LastName, E.FirstName, E.Title --,and some other employees fields
FROM Orders O
INNER JOIN Employees E ON O.EmployeeID = E.EmployeeID
.. и этот запрос должен идти в модель, а не в контроллер.
Честно говоря, большинство примеров в Интернете, похоже, используют Linq to Sql или Entity Framework, но я нашел этот простой пример для вас
c# - использование простых запросов в ASP.NET MVC-переполнение стека[
^] и есть также некоторые рекомендуемые чтения по этой ссылке -
Как я могу подключиться к SQL MVC на сервере и использовать его как C# добавление, редактирование, удаление и выберите | форумах ASP.NET [
^]
Теперь я должен объяснить, что MVC не является моей областью знаний, поэтому, если у вас все еще есть проблемы, возможно, стоит поднять новый вопрос...убедитесь, что вы включили код из своего комментария