c# - 通过在 DataContext 上使用 GetTable 方法检索一个对象

标签 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();

但这将检索表的每一行。我不想这样做。我应该怎么做才能只从表中取出一行?

最佳答案

它不会获取表的所有行,它只会通过 SQL 中的 where 语句获取第 1 行。请记住,Linq 是一个 deffered execution model , GetTable<T>实际上不运行任何东西,只有当 .First() runs 是任何东西。

我们将此方法添加到我们的 DataContext 中以经常执行此操作,这里是扩展形式:

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

为此目的,我们在每个类上的接口(interface)可以非常小:

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

关于c# - 通过在 DataContext 上使用 GetTable 方法检索一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2188056/

相关文章:

c# - 有两个表的谓词生成器

c# - nhibernate 在 where 子句中将 smallint 转换为 int

c# - 与另一个数据库相比,如何找到数据库中任何缺失的列、约束、索引

c# - 具有规范布局的搜索树

c# - 为什么 Entity Framework 不能在 LINQ 语句中使用 ToString()?

c# - 使用 Linq 更新主表时更新子记录的有效方法

asp.net - LINQ:自定义列名

c# - Unity 为什么 WheelCollider 扭矩这么慢?

c# - 如何遍历 treeView 控件的所有节点。 C#

c# - entityframework 已经有一个与此命令关联的打开的 DataReader,必须先将其关闭