我有 parent 类(class)和国家类(class):
[Table("tb_pais")]
public class PaisModel
{
[Key]
[Column("id")]
public int Id { get; set; }
[Column("nome")]
[Required(ErrorMessage = "O campo nome é obrigatório")]
public string Nome { get; set; }
[Column("sigla")]
[Required(ErrorMessage = "O campo sigla é obrigatório")]
public string Sigla { get; set; }
}
[Table("tb_estado")]
public class EstadoModel
{
[Key]
[Column("id")]
public int Id { get; set; }
[Column("nome")]
[Required(ErrorMessage = "O campo nome é obrigatório")]
public string Nome { get; set; }
[Column("sigla")]
[Required(ErrorMessage = "O campo sigla é obrigatório")]
public string Sigla { get; set; }
[Column("id_pais")]
[ForeignKey("Pais")]
public int IdPais { get; set; }
public virtual PaisModel Pais { get; set; }
}
如何使用以下 SQL 代码并返回我的类(class),其中包含 EstadoModel
信息及其内部以及与 EstadoModel< 相关的
?PaisModel
信息
var sql = "SELECT A.id, A.nome, A.sigla, A.id_pais as IdPais FROM dbo.tb_estado A " +
"INNER JOIN dbo.tb_pais B ON (A.id_pais = B.id) " +
filtroWhere + paginacao;
ret = db.Database.SqlQuery<EstadoModel>(sql).ToList();
我的 filtroWhere 和 paginacao 如下:
if (pagina > 0 && tamPag > 0)
{
if (pagina == 1)
{
pagina = pagina - 1;
}
else
{
pagina = ((pagina * tamPag) - tamPag) - 1;
}
paginacao = string.Format(" A.nome LIMIT {0} OFFSET {1}", tamPag, pagina);
}
var filtroWhere = "";
if (!string.IsNullOrEmpty(filtro))
{
filtroWhere = string.Format(" where lower(A.nome) like '%{0}%'", filtro.ToLower());
}
if (idPais > 0)
{
filtroWhere += (!string.IsNullOrEmpty(filtroWhere) ? " and" : "where") + string.Format(" B.id = {0}", idPais);
}
最佳答案
您正在使用 EntityFramework,我假设在您的 DBContext 类中您有 DBSet<EstadoModel> EstadoModels
然后就可以使用了
var items = db.EstadoModels.Include("Pais");
并添加你的过滤器
items.Where(x=> x.Paris.Id == idParis);
和你的极限
items.Take(10).Skip(10);
并返回列表
items.ToList();
关于c# - 将文本中的 SQL 返回到 Entity Framework 中的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51985621/