在LINQPad中有没有办法使用LINQ访问SYSOBJECTS表或各种INFORMATION_SCHEMA.xxx视图?
我花了很多时间在我们庞大的公司数据库中搜索部分名称,因为有太多的表和存储过程来记住它们的名称.
我知道我可以在LINQPad中输入和运行SQL但是我想在LINQ而不是SQL中执行此操作,因为LINQ更有趣:)
谢谢
Xanthalas
您还可以将SQL嵌入到LINQ语句中,如下所示:
void Main()
{
var matches = this.ExecuteQuery<SysObject>("SELECT name, type_desc AS "
+ "TypeDesc FROM [sys].[objects]");
foreach(var match in matches)
Console.WriteLine("{0,-30}{1}", (match.Name + ":"), match.TypeDesc);
}
// Define other methods and classes here
class SysObject
{
public string Name;
public string TypeDesc;
// etc...
}
Run Code Online (Sandbox Code Playgroud)
默认情况下,LinqPad不使用等宽字体作为结果,但您可以通过将以下位css粘贴到"编辑 - >首选项 - >结果 - >启动编辑器"中轻松更改它
body {font-family:Consolas,monospace; }
小智 5
是的你可以.
您所要做的就是在选定的连接中包含系统视图和SP,并使用LINQ,如下所示:
sys.Sysobjects.Where(sp => sp.Xtype == "P") // returns SPs
sys.Sysobjects.Where(t => t.Xtype == "U") // returns Tables
Run Code Online (Sandbox Code Playgroud)
或直接使用sys.Views [示例返回包含字符串"person"的所有表]:
sys.Tables.Join(sys.Columns,
t => t.Object_id,
c => c.Object_id,
(t, c) => new { t, c })
.Where(x => x.c.Name.Contains("person"))
.Select(x => new { ObjName = x.t.Name,
ChildName = x.c.Name } )
.Distinct()
Run Code Online (Sandbox Code Playgroud)
小智 0
使用 SYSOBJECTS 的内容创建一个新表,然后在新表中搜索
select * into SYSOBJECTS_COPY from SYS.OBJECTS
from o in SYSOBJECTS_COPY.AsEnumerable()
where Regex.IsMatch( d.Name, "partialName", RegexOptions.IgnoreCase )
select o
Run Code Online (Sandbox Code Playgroud)