从LINQ DataContext获取对象时可以使用连接吗?

时间:2010-07-21 22:50:53

标签: c# .net linq join

我正在使用LINQ和DataContext从SQL Server表返回一组对象。该表名为“Widgets”,我正在使用的相应C#类如下所示。 Widgets表包含Name列和TypeID列,它是另一个窗口小部件类表的外键。

[Table(Name = "Widgets")]
public Class Widget
{
    [Column(Name = "Name")]
    public String Name{get;set;}

    [Column(Name = "TypeID")]
    public int TypeID{get;set;}
}

现在我更愿意通过类型名称而不是ID来访问小部件的类型,如下所示。但是类型名称来自另一个表,然后是Widget,WidgetTypes。

[Table(Name = "Widgets")]
public Class Widget
{
    [Column(Name = "Name")]
    public String Name{get;set;}

    [Column(Name = "TypeID")]
    public int TypeID{get;set;}

    //NEW PROPERTY
    public String TypeName(get;set;)
}

有没有办法用LINQ DataContext进行JOIN,它会将数据库中多个表的数据作为单个对象返回?


更新:

这是我的DataContext

class WidgetsContext : DataContext
{
    public WidgetsContext(string connection):base(connection)
    {

    }

    public Table<Widget> Widgets;
    public Table<WidgetType> WidgetTypes;
}

1 个答案:

答案 0 :(得分:2)

如果您正在谈论Linq to SQL,那么您的LINQ代码中根本不需要连接:

var funWidgets = ctx.Widgets.Where(w => w.Type.Name == "FunWidgetType");

(假设ctx是您的DataContext)

您所要做的就是确保在Widgets和WidgetTypes之间的DBML文件中定义了关系。