代码之家  ›  专栏  ›  技术社区  ›  uzay95

通过对DataContext使用GetTable方法检索一个对象

  •  2
  • uzay95  · 技术社区  · 14 年前

    我有一个类是从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 回复  |  直到 13 年前
        1
  •  2
  •   Nick Craver    14 年前

    它不会获取表中的所有行,只会通过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; }
    }
    
        2
  •  0
  •   mtmk    14 年前

    不,不会的。我知道它看起来会的,但是linq2sql实际上可以计算出必要的“最高效”的SQL。您可以尝试使用探查器检查发出的查询。