通过DataContext上的GetTable方法检索一个对象

时间:2010-02-02 22:03:35

标签: c# linq-to-sql

我有一个类继承自DataContext以使用Linq。

public class Context : DataContext
{
    public Context(string connectionString)
        : base(connectionString)
    {
    }
}


[Table(Name = "TableNameee")]
public class ClassOfTable
{

}

我有另一个映射到表的类。 我正在使用

context.GetTable<ClassOfTable>()

检索映射到ClassOfTable类的表的所有行的方法。但我想从数据库表中只检索一行。 我可以这样使用它:

ClassOfTable cls = context.GetTable<ClassOfTable>().Where(p=>p.id==1).First();

但这将检索表的每一行。我不想这样做。我该怎么办才能从桌子上拿一排?

2 个答案:

答案 0 :(得分:2)

它不会获取表的所有行,它只会通过SQL中的where语句获取1行。请记住,Linq是deffered execution modelGetTable<T>实际上并没有运行任何东西,只有当.First()运行时才会调用任何东西。

我们将此方法添加到DataContext中以便经常这样做,这里是扩展形式:

public static T GetById<T>(this DataContext dc, long id) where T : class, IBaseEntity
{
  return dc.GetTable<T>().Single(t => t.Id == id);
}

为此目的,我们的每个类的界面都非常小:

public interface IBaseEntity
{
    long Id { get; set; }
}

答案 1 :(得分:0)

不,不会。我知道它看起来会如此,但linq2sql实际上可以找到必要的“最有效”的SQL。您可以尝试使用分析器检查已发布的查询。