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

时间:2018-12-11 14:40:26

标签: c# linq linq-to-sql linqpad

我使用的是LinqPAD的免费版本。

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

因此,我打开LinqPAD并编写表示数据库中三个表的硬编码对象/类。
我切换到“ C#程序”。

import { TestBed, async } from '@angular/core/testing';
import { AppComponent } from './app.component';
import { ScrollingModule } from '@angular/cdk/scrolling';

describe('AppComponent', () => {
  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [
        AppComponent
      ],
      imports: [
        ScrollingModule,
      ],
    }).compileComponents();
  }));

  it('should render at least 4 items', () => {
    const fixture = TestBed.createComponent(AppComponent);
    fixture.detectChanges();
    const compiled = fixture.debugElement.nativeElement as HTMLElement;
    expect(compiled.querySelectorAll('.example-item').length).toBeGreaterThanOrEqual(4); // <-- Error: Expected 0 to be greater than or equal 4.
  });
});

}

我按下跑步。
LinqPAD在Vizualizer中显示了我的表格。但是“ SQL”选项卡为空。
怎么了?我可以获取原始SQL查询吗? 像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();

1 个答案:

答案 0 :(得分:0)

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

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