25

我刚刚开始使用 LINQPad,到目前为止我很喜欢它,但是我遇到的大多数 LINQ TO SQL 教程都使用了由 Visual Studio 生成的 DataContext 类,用于持久更新等。我对 LINQ TO SQL 也很陌生所以我的问题是LINQPad中的以下内容是什么(如果有的话)......

MyDbDataContext db = new MyDbDataContext();

...

db.SubmitChanges();
4

6 回答 6

31

简短回答:您不需要自己创建 DataContext。LINQPad附带了很多示例,看看它们。

当您将 LINQPad 连接到数据库时,它会为您创建 DataContext。DataContext 的表 ( Table<T>)SubmitChanges()可作为本地成员使用。

例如,LINQPad 的默认“C# 表达式”模式你可以写:

from p in Person
where p.Name == "Joe"
select p.Address

在 LINQPad 的“C# 语句”模式下:

var query = from p in Person
            where p.Name == "Joe"
            select p.Address;

query.Dump(); // Dump() shows results below

Person joe = query.First();
joe.Name = "Peter";
SubmitChanges();

joe.Dump(); // shows joe's values under the previous query results

LINQPad 的Dump()扩展方法非常有用,可以在任何对象或集合上调用(在 LINQPad 的语句模式下)以显示下面的结果。

请注意,您甚至不需要连接到数据库即可使用 LINQPad。您可以使用内存中的集合:

int[] numbers = new[] { 1, 2, 3, 4, 5 };
numbers.Where(n => n > 3).Select(n => n * 2).Dump();

事实上,你甚至不需要使用 LINQ 就可以使用 LINQPad。它也可以作为片段编译器使用。

于 2009-05-12T13:30:11.960 回答
19

如前所述,您不需要创建 DataContext,因为 LINQPad 默认会创建一个。
但以防万一,您需要第二个可以使用的DataContext (用于同一数据库)

var secondDataContext = new UserQuery();

这将创建第二个数据上下文,就像自动创建的一样。

于 2011-05-04T10:35:13.280 回答
17

我知道这已经有了答案,我同意卢卡斯的观点,但想补充一些可能对这个问题的读者有所帮助的东西。

如果您愿意,可以从程序集中加载您自己的 DataContext。无论您是加载自己的 Context 还是让 LinqPad 为您构建一个,您都在 LinqPad 生成的“UserQuery”类的 Context 中运行。

以下 C# 语句显示了这一点:

  this.GetType().Name.Dump();  // Shows UserQuery

此 UserQuery 类派生自 DataContext。在此示例中,我让 Linqpad 为 AdventureWorks 数据库构建数据上下文:

  this.GetType().BaseType.Dump();  // Shows TypedDataContext

如果我加载我自己的名为 MyDataContext 的 DataContext:

  this.GetType().BaseType.Dump();  // Shows MyDataContext
于 2009-07-24T16:33:10.743 回答
10

根据 jaraics 的回复,我发现 UserQuery 构造函数需要一个连接字符串。至少它适用于 LINQPad 版本 4.37.11。因此,我从 LINQPad 创建的 UserQuery 实例中检索了连接字符串,并使用它来创建我自己的实例。

var connectionString = this.Connection.ConnectionString;
var secondDataContext = new UserQuery(connectionString);

当我使用上面的代码时,它给了我第二个 DataContext。

于 2012-03-05T13:53:28.207 回答
3

根据@Thymine 对@DRS9222 答案的评论,您可以简单地使用类似的东西:

void Main()
{
    TypedDataContext db = this;

    var qry = from i in db.Items
        select i;
    // etc. etc.
}

然后,这在 LinqPad 和您的 IDE 之间变得非常可转移,而不必修复或删除上下文。

于 2020-07-02T12:09:46.623 回答
2

每当我在主要部分之外添加静态方法时,我都可以使用以下示例进行访问:

using(var VT = new LINQPad.User.TypedDataContext())
  return (from g in VT.GM_MEMBERS  where g.Username == username select new { g.Password }).FirstOrDefault()?.Password;
于 2017-03-02T08:40:25.393 回答