Entity Framework лямбда-запрос для получения информации из других таблиц - PullRequest
0 голосов
/ 11 апреля 2019

Я получаю данные из таблицы, используя лямбда-запрос каркаса сущностей:

db.Orders.Where(x => x.OrderID == orderid)
         .Select(x => new JOrders 
         { 
             id = x.OrderID, 
             customer_id = x.CustomerID, 
             product_id = x.ProductID,  
             account_id = x.AccountID
         }).toList()

CustomerID, ProductID и AccountID являются первичными ключами из отдельных таблиц, т.е.Customers, Products, Accounts соответственно.Я хотел бы получить столбец Имя для этих идентификаторов из соответствующих таблиц и вернуть его вместо этого.Я ищу оптимизированный лямбда-запрос, поскольку количество возвращаемых записей может быть тысячами.

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Если вы правильно установили свойства навигации в своем классе Orders.Просто включите их в свой запрос, и тогда вы сможете использовать эти свойства в своей лямбде.Примерно так:

db.Orders
.Include(x => x.Customer)
.Include(x => x.Product)
.Include(x => x.Account)
.Where(x => x.OrderID == orderid)
         .Select(x => new JOrders 
         { 
             id = x.OrderID, 
             customer_name = x.Customer.Name, 
             product_name = x.Product.Name,  
             account_name = x.Account.Name
         }).toList()

Но я считаю, что у вас будет несколько Products в Order, поэтому вам, возможно, придется изменить его соответствующим образом.

1 голос
/ 11 апреля 2019

Если вы не делали связи в EF, вы можете присоединиться вручную, как это

db.Orders.Where(x => x.OrderID == orderid)
.Join(db.Customers,Order => Order.OrderID, Customer => Customer.CustomerID, (Order, Customer) => new {OrderID = Order.id, CutomerName = Customer.Name, more fields..}).ToList()

Но если у вас была соответствующая таблица, вы можете просто назвать ее

db.Orders.Where(x => x.OrderID == orderid)
         .Select(x => new JOrders 
         { 
             id = x.OrderID, 
             customer_id = x.CustomerID, 
             product_id = x.ProductID,  
             account_id = x.AccountID,
             name = x.Customers.Name
         }).toList()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...