如何使用linq查询sysobjects?

时间:2013-03-01 22:42:26

标签: c# .net linq entity-framework entity-framework-5

LINQ等效于以下SQL语句是什么?我正在使用实体框架5,数据库优先。

SELECT Name 
FROM SysObjects 
WHERE xtype='U' AND Name LIKE 'D[_]%' 
ORDER BY Name ASC

1 个答案:

答案 0 :(得分:2)

您可以使用LINQ执行此操作,但前提是您将SysObjects映射到您的类,否则这将无法通过其他方式实现。

例如:

public class SysObject
{
    public int SomeUniqueId { get; set; }
    public string Name { get; set; }
}

映射文件将是这样的(我使用的是Code First方法,因为您没有说明如何使用EF)

public class SysObjectMap : EntityTypeConfiguration<SysObject>
{
    HasKey(p => p.SomeUniqueId);

    Property(p => p.Name).IsRequired();

    ToTable("SysObjects"); // If there is Schema pass it as a 2nd argument
    Property(p => p.Name).HasColumnName("name");
}

您需要在上下文类中注册此映射。当然,如果您使用的是Database First方法,上面的内容可能会让您感到困惑,因为Visual Studio生成的代码会有很大差异。

更新:在数据库优先方法的情况下,我确信您将能够看到系统表。当然,您始终可以打开生成的EDMX和实现类,并自行添加映射。另一种方法是创建一个包含SysObjects的View。然后使用模型设计器添加View。