如何使用 FromSqlRaw 返回 Entity Framework Core 中的 int 列表?

Ste*_*eve 7 entity-framework-core

我有这个 sql 查询,它在实体框架 6 中使用原始 sql 并返回整数列表。

var sqlString = "SELECT DISTINCT A.ListId FROM ABC A INNER JOIN ABCLists B ON B.Id = A.ListId"

var recordIds = context.Database.SqlQuery<int>(sqlString).ToList();
Run Code Online (Sandbox Code Playgroud)

如何将上面的转换为 Entity Framework Core 3?

我尝试使用 EF Core,但不确定在哪里定义它以列表 int 类型返回。以下是我所拥有的。

var recordIds = _djContext.ABC.FromSqlRaw(sqlString).ToList();
Run Code Online (Sandbox Code Playgroud)

注意:我不需要 LINQ 版本,只需要原始 SQL。谢谢。

Kir*_*hxh 7

事实上,您只需使用以下命令“投影”查询结果Select

string sqlString = "SELECT A.Id FROM ABC A INNER JOIN ABCLists B ON B.Id = A.Id";
List<int> recordIds = _djContext.ABC.FromSqlRaw(sqlString).Select(abc => abc.Id).ToList();
Run Code Online (Sandbox Code Playgroud)


E-B*_*Bat 3

在 EF 3.0 中,您需要声明一个专用类型,称为Keyless 实体类型

[Keyless]
public class SomeType
{
    public int Ids { get; set; }
}   
Run Code Online (Sandbox Code Playgroud)

然后像往常一样为其定义一个 DbSet

public DbSet<SomeType> SomeTypes { get; set; }
Run Code Online (Sandbox Code Playgroud)

注意: [Keyless] 属性在 EFCore 5.0 中可用。对于 EF 3.0 您可以使用流畅的配置调用 .HasNoKey() 方法:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<SomeType>().HasNoKey();
}
Run Code Online (Sandbox Code Playgroud)

然后你可以做类似的事情:

var result = context.SomeTypes.FromSqlRaw(sqlString).ToList();
Run Code Online (Sandbox Code Playgroud)