2012-04-25 2 views
0

У меня возникают проблемы с созданием запроса.Несколько табличных запросов

То, что я пытаюсь добиться, это создать запрос, который соответствует следующим критериям

Show all records in table house where 
tbl_house.townId =tbl_town.townId 
and house.type = “3bedrooms” 

То, что я пытался до сих пор

var house = 
    From m in db.tbl_house 
    Where m.townId == tbl_town.townId && m.Bedrooms == "3bedrooms" 
        Select m 

Любая помощь или совет, будут оценены

обновление

Существует три агентства недвижимости один, два и три Для каждого агентства недвижимости есть учетная запись, поэтому, когда агентство недвижимости регистрируется, я хочу только показать Дома для этого города с указанным типом жилья.

Все дома имеют townID

Пример: дом 1 может иметь townId из 3, который = town3 и А housetype = «3Спальни»

дом 2 может иметь townId из 3, который = town3 и А housetype = «2Спальня»

дом 3 может иметь townId из 4, который = town4 и housetype = «2Спальня»

Так что я пытаюсь сделать, это выбрать все дома с townId 3 и housetype = "3 спальни" И покажите им агентство недвижимости, у которого есть город, связанный с ним.

+0

Вопрос не имеет смысла ... какое значение tbl_house.houseId вас интересует? Вы хотите, чтобы записи о клиентах для конкретного дома, клиентов для всех домов и т. Д.? У каждого из них есть небольшое решение. –

+0

Я обновил вопрос –

+0

В чем проблема –

ответ

0

Я все еще не совсем понимаю, что вы просите, но похоже, что вы просите «все записи из таблицы A (« дом »), которые имеют соответствующую запись в таблице B (« город »). Если это не так, вам нужно объяснить, что означает «tbl_house.townId = tbl_town.townId», потому что в действительности это не имеет смысла. Если является то, что вы хотите, то вам просто необходимо проверить, чтобы увидеть, если ключевое поле иностранного имеет значение или нет:

var house = from m in db.tbl_house 
      where m.townId.HasValue() && m.Bedrooms == "3bedrooms" 
      select m; 

Проблема с запросом вы пытались это, что tbl_town.townId не имеет смысла где вы его положили. tbl_town представляет собой набор объектов, представляющих всю таблицу. В этом контексте townId - это поле определение, но вы пытаетесь сравнить его с реальным полем в одном элементе из вашего набора объектов tbl_house. Две вещи не то же самое, и вы не можете сравнивать их напрямую. Это было бы как сказать where m.Bedrooms = String - его просто не синтаксически правильно.

EDIT:

По обновленной вопрос, кажется, как вы знаете город идентификатор города, который вы ищете; в этом случае, а затем просто фильтруйте на этом. Я не уверен, почему вы пытаетесь использовать «tbl_town.townId», когда знаете идентификатор, который вы хотите, на основе агентства.

Синтаксис здесь полностью зависит от направления ваших отношений; Например, предположим, что ваш есть объект агентство, которое имеет TownId, вам просто нужно будет фильтровать, что:

var agency = this.GetTheCurrentAgencySomehow(); 
var house = from m in db.tbl_house 
      where m.townId == agency.townId && m.Bedrooms == "3bedrooms" 
      select m; 

С другой стороны, если ваш объект Город имеет AgencyId, вы, вероятно, использовать навигацию свойства, чтобы получить от дома -> города -> агентство:

var agency = this.GetTheCurrentAgencySomehow(); 
var house = from m in db.tbl_house 
      where m.town.agencyId == agency.agencyId && m.Bedrooms == "3bedrooms" 
      select m; 

не зная больше о фактических деталях реализации модели данных нет никакого способа, чтобы действительно быть более конкретными.

+0

Я думаю, что 'tbl_town' - это имя класса _and_ имя объекта. Я вижу, что это происходит постоянно, нет плюрализации: очень запутанно. В вашем ответе вы должны, вероятно, сделать 'where m.townId == 3', но тогда: что такое проблема OP? –

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