У меня есть база данных, которая включает в себя один ко многим внешним ключом, напримерСоставьте это в одно утверждение?
Table {shop
[Id]
...}
Table {user
[Id]
[Shop_id]
[Archived]
}
У меня также есть метод, как показано ниже
public IEnumerable<shop> GetShopDetails(int shopId)
{
var foo = (from s in context.Shops
where s.Id = shopId
select s).ToList();
return foo;
}
Как следствие этого, он будет возвращать все пользователи для это магазин. В большинстве случаев я только хочу, чтобы пользователи не архивировались.
Есть ли способ записать это в одно утверждение, поэтому я могу пройти, скажем, второй параметр includeArchived и использовать это, чтобы определить, верну ли я всех пользователей или только те, которые являются активными.
В настоящее время я могу заставить его работать либо путем добавления метода к моему объекту магазина, который возвращает подмножество пользователей, либо я могу загрузить магазин, получить его идентификатор, а затем создать отдельную коллекцию пользователей, которые содержат соответствующий fk, но любой метод кажется мне немного неуклюжим.
Вам нужно сделать присоединиться: http://stackoverflow.com/questions/3217669/how-to-do-a-join-in- linq-to-sql-with-method-syntax – Nick
Почему вы преобразовываете запрос в список? Почему бы просто не вернуть «IQueryable» и разрешить вызывающему устройству его далее фильтровать (на уровне базы данных), если они того пожелают? –
Servy
@Servy - опасность обучения EF из интернета. Я боюсь, я собираю плохие привычки из плохих уроков. – Matt