я (по крайней мере пытаюсь) осуществлять Repository pattern
в моем .NET C# проекта поэтому, когда мне нужно взаимодействовать с базой данных I нам что-то вроде этого:Конкатенация два запросы база на внешнем ключ
IList<Sole> soles = SoleService.All().ToList();
Поскольку имя метода, вызванного службой, предлагает с запросом выше, я получаю все записи из таблицы Sole
. Я не хочу, и я думаю, что это правильный способ реализовать этот шаблон, чтобы сохранить слишком много пользовательской логики в моем сервисе. Я имею в виду, что я хочу только сохранить метод All()
, и каждая модификация результата будет сделана вне методов службы.
Текущая проблема в этом. У меня есть компания Sole
и юридическое лицо SoleColor
. SoleColor
имеет столбец внешнего ключа SoleID
, делающий соотношение между двумя таблицами. Сейчас для этих двух сущностей я могу назвать только All()
метод:
var soleColors = SoleColorService.All();
var soles = SoleService.All();
Но здесь мне нужно некоторые настройки в виде выбора только те строки из Sole
, которые связаны с SoleColor
лица. Другими словами, заканчивается список только тех строк из Sole
, где Sole.ID может быть найден как внешний ключ в SoleColor
внешний ключ SoleID.
Сейчас я немного смущен - прошло некоторое время с тех пор, как я в последний раз использовал простой синтаксис SQL. Я думаю, что это легко достигается с помощью SQL и JOIN. Но когда LINQ участвует и мой опыт до сих пор говорит, что мне нужны эти два запроса:
var soleColors = SoleColorService.All();
var soles = SoleService.All();
А потом сделать какой-то РЕГИСТРИРУЙТЕСЬ/UNION фильтровать результаты только мне нужно.
Итак, какие инструменты мне нужно использовать в подобной ситуации, потому что это не единственное место, в котором я нуждаюсь в этом, и я хочу научиться делать это сам и, конечно, делать это в этой текущей ситуации?
Вы используете ** ** LINQ to SQL или Entity Framework? В любом случае, как вы заметили, вы можете найти [IQueryable.Join] (http://msdn.microsoft.com/pl-pl/library/bb534644.aspx) или [IEnumerable.Join] (http: // msdn .microsoft.com/pl-pl/library/system.linq.enumerable.join.aspx), или - при использовании EF - использовать свойства навигации. :) –
Извините, я даже не думал, что это должна быть проблема. Я использую ADO.NET EX-Code First. – Leron
Я просто уточняю, LINQ To SQL является * старше *, в то время как Entity Framework (с использованием LINQ To Entities) является чуть более новым, хотя оба работают немного по-другому. –