LINQPad: получить простой SQL-запрос из жестко закодированных объектов - PullRequest
0 голосов
/ 11 декабря 2018

Я использую бесплатную версию LinqPAD.

У меня есть только .cs файлы с кодом.Я не могу запустить и отладить его.У меня нет базы данных.(И я не программист C #.)
Мне нужно преобразовать запросы Linq в необработанный запрос SQL (MsSql).Я хочу видеть простой SQL-запрос.

Поэтому я открываю LinqPAD и пишу жестко закодированные объекты / классы, которые представляют три таблицы из БД.
Я переключаюсь на "Программу 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 показывает мне таблицу в Vizualizer.Но вкладка SQL пуста.
Что не так?Могу ли я получить сырой SQL-запрос?Нравится SELECT ... FROM ...

1 Ответ

0 голосов
/ 04 января 2019

Вам потребуется поддержка базы данных SQL, если вы хотите использовать функциональность LinqPads для преобразования запросов Linq в SQL для вас.LinqPad также предлагает ряд драйверов, позволяющих вам использовать несколько источников данных (например, SQLite), которые требуют меньше накладных расходов, чем, например, MSSQL.Без базы данных SQL LinqPad не сможет вам помочь.

Если вы хотите использовать функциональность LinqPads без базы данных, вам нужно использовать перечисленные выше классы для создания схемы базы данных.Если код был в проекте C # с использованием Visual Studio, Entity Framework может сначала использовать код для генерации схемы БД для вас на основе этих классов.

...