我刚开始使用LINQPad,到目前为止我很喜欢它,但是我发现大部分LINQ TO SQL的教程都使用了由Visual Studio生成用于持久化更新等操作的DataContext类。我对LINQ TO SQL也相当新,所以我的问题是在LINQPad中是否有以下内容的等效项(如果有的话)...
MyDbDataContext db = new MyDbDataContext();
...
db.SubmitChanges();
我刚开始使用LINQPad,到目前为止我很喜欢它,但是我发现大部分LINQ TO SQL的教程都使用了由Visual Studio生成用于持久化更新等操作的DataContext类。我对LINQ TO SQL也相当新,所以我的问题是在LINQPad中是否有以下内容的等效项(如果有的话)...
MyDbDataContext db = new MyDbDataContext();
...
db.SubmitChanges();
简短回答:您无需自己创建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。它也非常适用于片段编译器。
如前所述,您无需创建DataContext,因为LINQPad默认会创建一个。
但是以防万一,如果您需要使用同一数据库的第二个DataContext,则可以使用。
var secondDataContext = new UserQuery();
这将创建一个类似于自动创建的第二个数据上下文。
我知道这个问题已经有答案了,我同意Lucas的看法,但是想添加一些可能有助于读者理解的内容。
如果你想要的话,可以从程序集中加载自己的DataContext。 无论是加载自己的Context还是让LinqPad为您构建一个Context,您都在运行由LinqPad生成的“UserQuery”类的上下文中。
以下C#语句展示了这一点:
this.GetType().Name.Dump(); // Shows UserQuery
这个UserQuery类派生自DataContext。在这个例子中,我让Linqpad为AdventureWorks数据库构建了一个数据上下文:
this.GetType().BaseType.Dump(); // Shows TypedDataContext
如果我加载了自己的DataContext叫做MyDataContext: this.GetType().BaseType.Dump(); // Shows MyDataContext
public class SubClass { public SubClass(TypedDataContext db) { db.Users.Where(x => x.IsActive); } }
并使用 new SubClass(this);
创建它。 - Thymine在jaraics的回复基础上,我发现UserQuery构造函数需要一个连接字符串。至少对于LINQPad 4.37.11版本是这样的。因此,我从由LINQPad创建的UserQuery实例中检索了连接字符串,并使用该连接字符串创建了自己的实例。
var connectionString = this.Connection.ConnectionString;
var secondDataContext = new UserQuery(connectionString);
当我使用上面的代码时,它给了我一个第二个 DataContext。using (var dc = new PulseDataContext(this.Connection.ConnectionString))
{
/* 在此处编写您的更新/插入代码 */
dc.SaveChanges();
}
- CAK2void Main()
{
TypedDataContext db = this;
var qry = from i in db.Items
select i;
// etc. etc.
}
这样做就可以在 LinqPad 和您的 IDE 之间进行方便的转移,而无需修复或删除上下文。
每当我在主函数之外添加一个静态方法时,我可以使用以下样例进行访问:
using(var VT = new LINQPad.User.TypedDataContext())
return (from g in VT.GM_MEMBERS where g.Username == username select new { g.Password }).FirstOrDefault()?.Password;