我有一个类继承自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();
但这将检索表的每一行。我不想这样做。我该怎么办才能从桌子上拿一排?
答案 0 :(得分:2)
它不会获取表的所有行,它只会通过SQL中的where语句获取1行。请记住,Linq是deffered execution model,GetTable<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。您可以尝试使用分析器检查已发布的查询。