多个表查询

时间:2012-04-25 02:16:15

标签: asp.net-mvc-3 linq entity-framework-4

我在创建查询时遇到了问题。

我想要实现的是创建符合以下条件的查询

   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

示例:house 1的townId为3,其中= town3,housetype =“3bedrooms”

house 2的townId为3,= town3,housetype =“2bedrooms”

3号房子的townId为4,其中= town4,housetype =“2bedrooms”

所以我要做的就是选择所有拥有townId为3且housetype =“3bedrooms”的房屋 并将它们展示给拥有3个城镇的地产代理商。

1 个答案:

答案 0 :(得分:0)

我仍然不清楚你的要求是什么,但似乎你要求“表A('house')中的所有记录在表B('town')中都有匹配的记录”。如果那不是真的,你需要解释什么是“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 - 它只是在句法上不正确。

编辑:

根据您更新的问题,您似乎知道您正在寻找的城镇的城镇ID;在这种情况下,然后只是过滤它。根据代理商的说法,当你知道你想要的ID时,我不确定你为什么要使用“tbl_town.townId”。

这里的语法完全取决于你们关系的方向;例如,假设您有一个具有TownId的Agency对象,您只需要对其进行过滤:

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

另一方面,如果您的Town对象具有AgencyId,您可能会使用导航属性来获取房屋 - >镇 - >机构:

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

如果不了解数据模型的实际实现细节,就无法真正更具体。

相关问题