2012-04-03 2 views
2

У меня есть такая структура базы данных (1 - один, 0 - многие)Linq к Sql соединить две таблицы

Product 1->0 Orders 0->1 Users 

Мне нужно найти всех пользователей для указанного продукта, я начал писать Linq запрос, но не знаете, как закончить его.

public IQueryable<User> GetUsers(int productId) 
{    
    return _db.Products.First(p => p.Id == productId).... 
} 

ответ

1

Первые вещи первых, метод First будет возвращать только первый элемент, который отвечает вашим критериям, и так как вы хотите вернуть IQueryable из User с, это, вероятно, не то, что вы хотите.

Во-вторых, я думаю, что самый простой способ начать с Linq-to-SQL - использовать нотацию запроса, особенно когда вы имеете дело с объединениями, которые don't look too pretty when using lambda expressions.

public IQueryable<User> GetUsers(int productId) 
{ 
    return from p in _db.Products 
      join o in _db.Orders on p.Id equals o.productId 
      join u in _db.Users on o.userId equals u.userId 
      where p.productId == productId 
      select u; 
} 
1

Нечто подобное должно работать (написано в VB.NET):

Dim users() = (from x in _db.Users 
      Join y in _db.Orders on y.userid equals x.userid 
      Join z in _db.Product on z.productid equals y.productid 
      where z.productname = "ProductName" 
      select x.firstname,x.lastname,x.email,e.tel).toarray() 

Я догадывался полей в таблицах, но это даст вам ПгвЬЫате, LastName электронную почту и телефон количество пользователей, заказавших определенный продукт.

Thanks

Paul.

Смежные вопросы