LINQ连接很多 - 许多关系

时间:2009-09-08 15:53:35

标签: c# .net sql linq repeater

我正在使用c#.net和LINQ

在我的LINQ模型中,我有三个数据库表:

LINQ MODEL http://img180.imageshack.us/img180/9827/linqmodel.jpg

以下代码是我访问数据的方式:

    public IQueryable<tblAvailability> GetAvailabilitiesBySet(int id)
    {
        return (from a in dc.tblAvailabilities
                where a.asID == id
                select a).DefaultIfEmpty();
    }

我将数据显示在屏幕上(通过转发器)。但是我似乎无法访问位于tblAppointmentType中的'appTypeName'。我以为我可以像这样访问它:

<%#Eval("tblAvailabilities.tblAvailabilityAppointmentType.tblAppointmentType.appTypeName")%>

但它不会让我访问tblAppointmentType。我做错了什么?

由于

克莱尔

4 个答案:

答案 0 :(得分:3)

LINQ2Sql在没有一点手握的情况下无法处理很多2 -...

删除tblAvailabiltyAppointmentType和tblAppoitmentType之间的链接。创建一个新链接FROM tblAvailabiltyAppointmentType TO tblAppoitmentType。单击该新链接以转到属性。将基数更改为OneToOne(因为您无法选择ManyToOne),打开Cild属性部分,并将名称更改为单数。

现在,当您执行问题中的查询时,tblAvailability对象将具有集合tblAvailabilityAppointmentTypes,并且该集合中的每个tblAvailabilityAppointmentType对象将具有属性对象tblAppointmentType,其具有您正在寻找的appTypeName字段。

var appTypes = GetAvailabilitiesBySet(99).tblAvailabilityAppointmentTypes.
    Select(a=>a.appTypeName);

答案 1 :(得分:0)

你没有加入任何其他表,因此结果只会带回tblAvailabilities行。

var query = (from avail in dc.tblAvailabilitities
        join aaTyp in dc.tblAvailabilityAppointmentType
             on avail.availabilityID == aaType.availabilityID
        join appType in dc.tblAppointmentType
             on aaType.appTypeID == appType.appTypeID
        select new { TypeName = appType.appTypeName });

答案 2 :(得分:0)

使用您当前的架构,您可能会在tblAvailabilities中为每个记录创建多个tblAvailabilityAppointmentType记录。这意味着您需要在尝试绑定到tblAppointmentType之前获取特定条目。此外,您没有加入其他表来检索行(如果您想这样做)。

顺便说一下,你真正想要的是多少?您的使用(以及我从您的命名中推断出的概念)使您看起来想要一对多的关系。也许很多tblAvailabiliy记录,每个记录引用一个tblAppointmentType?

如果你确实想要多对多,那么使用GetAppointmentTypes()方法扩展tblAvailabilities类可能会很好。这是a decent article on codeproject

其他,请确保您加入其他表并引用tblAppointmentType中的右行

答案 3 :(得分:0)

我在第一个转发器中添加了另一个转发器,并访问了正确的数据库表。