Что-то не так с вашей функцией.SelectMany
вернет ноль, если нет пользователя, потому что вы используете DefaultIfEmpty()
.Это означает, что вы хотите сделать left join
.Но функция возврата пользователей.Так что это может быть способ для вас:
public IQueryable<User> GetUsers(int productId)
{
return (
from o in _db.Orders
from u in _db.User.Where(a=>a.Id==o.UserId).DefaultIfEmpty()
where o.ProductId==productId
select u
);
}
Я бы ожидал, что функция будет возвращать пользователя при вызове GetUsers.Тогда что-то вроде этого:
public IQueryable<User> GetUsers(int productId)
{
return (
from o in _db.Orders
join u in _db.User
on o.UserId equals u.Id
where o.ProductId==productId
select u
);
}
Или, если заказы - это таблица один-ко-многим, и вам нужны уникальные пользователи.Тогда что-то вроде этого:
public IQueryable<User> GetUsers(int productId)
{
return (
from o in _db.Orders
where _db.Users.Select(a=>a.Id).Contains(o.UserId)
where o.ProductId==productId
select u
);
}
Я не совсем уверен, что вы хотите.Но я надеюсь, что это поможет