C# LINQPad:从硬编码对象获取普通SQL查询

C# LINQPad:从硬编码对象获取普通SQL查询,c#,linq,linq-to-sql,linqpad,C#,Linq,Linq To Sql,Linqpad,我使用LinqPAD的免费版本 我只有带代码的.cs文件。我无法运行和调试它。我没有数据库。 我不是C程序员。 我需要将Linq查询转换为原始SQLMsSql查询。我想看看简单的SQL查询 因此,我打开LinqPAD并编写硬编码对象/类,它们表示DB中的三个表。 我切换到C程序 public class ContactModel { public int UserSecondId { get; set; } public int UserId { get; set; }

我使用LinqPAD的免费版本

我只有带代码的.cs文件。我无法运行和调试它。我没有数据库。 我不是C程序员。 我需要将Linq查询转换为原始SQLMsSql查询。我想看看简单的SQL查询

因此,我打开LinqPAD并编写硬编码对象/类,它们表示DB中的三个表。 我切换到C程序

public class ContactModel
{
    public int UserSecondId { get; set; }
    public int UserId { get; set; }
    public int OrganizationId { get; set; }
    public bool IsPrimary { get; set; }
}

class Contacts
{
    public int OrganizationId { get;set; }
    public int UserId { get;set; }
    public char IsPrimary { get;set; }
}

class Organizations
{
    public int Id { get;set; }
    public int SecondId { get;set; }
}

class Users
{
    public int Id { get;set; }
    public char IsActive { get;set; }
    public int SecondId { get;set; }
}

void Main()
{

    List<Contacts> Contacts = new List<Contacts>();
    Contacts.Add(new Contacts { OrganizationId = 1, UserId = 1, IsPrimary = 'Y' });
    Contacts.Add(new Contacts { OrganizationId = 2, UserId = 1, IsPrimary = 'Y' });

    List<Organizations> Organizations = new List<Organizations>();
    Organizations.Add(new Organizations { Id = 1, SecondId = 1 });
    Organizations.Add(new Organizations { Id = 2, SecondId = 2 });

    List<Users> Users = new List<Users>();
    Users.Add(new Users { Id = 1, SecondId = 1, IsActive = 'Y' });
    Users.Add(new Users { Id = 2, SecondId = 1, IsActive = 'Y' });

    int[] orgSecondIdList = { 1, 2 };

    var query =
        from contacts in Contacts
        from orgs in Organizations.Where(o => o.Id == contacts.OrganizationId)
        from users in Users.Where(o => o.Id == contacts.UserId)
        where contacts.IsPrimary == 'Y' && users.IsActive == 'Y' &&
        orgSecondIdList.Contains(orgs.SecondId)
        select new ContactModel
        {
            OrganizationId = contacts.OrganizationId,
            UserId = contacts.UserId,
            UserSecondId = users.SecondId
        };

    query.Dump();
}

我按run。 LinqPAD在Vizilizer中向我显示表格。但是SQL选项卡是空的。 怎么了?我可以得到原始SQL查询吗?
像选择。。。从…

如果您希望使用LinqPads功能将Linq查询转换为SQL,则需要SQL数据库的支持。LinqPad还提供了许多驱动程序,允许您使用许多数据源,例如SQLite,这些数据源比MSSQL所需的开销更小。没有SQL数据库,LinqPad无法帮助您


如果您想在没有数据库的情况下继续使用LinqPads功能,则需要使用上面列出的类来创建数据库架构。如果代码在使用VisualStudio的C项目中,Entity Framework可以首先使用代码根据这些类为您生成DB模式。

您的代码没有与SQL或数据库相关或依赖的功能,它是一个基本类负载&linq查询。如果没有任何内容处于可运行状态,则无法从实际代码执行和捕获生成的SQL。是否可以将Linq查询转换为SQL?我可以在表格中看到正确的结果。我不明白为什么我看不到显示这个表的SQL?有没有工具可以将Linq转换为纯SQL,而不需要实际的数据和数据库?因为我没有看到它的困难,你没有看到任何SQL,因为你没有执行任何SQL!LinqPad中的Linq2Sql代码将您的linq代码转换为SQL,但是由于您没有使用它,因此没有任何东西可以转换!好的,谢谢。是否有可能在不使用数据库和调试的情况下将大量Linq代码转换为SQL?我看不出有什么困难,因为我们需要在不检查真实数据的情况下从一种常规语法转换为另一种常规语法。例如,“联系人”中的“联系人”是“选择…”。。。从联系人到联系人LINQ到SQL或EF生成的SQL在很大程度上取决于所使用的数据库提供程序,可能会有所不同-一些提供程序根本不使用SQL。例如,您可以使用IQ驱动程序创建简单的本地SQLite数据库,然后查看生成的SQLite SQL。