c# - 将文本中的 SQL 返回到 Entity Framework 中的模型

标签 c# postgresql entity-framework

我有 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/

相关文章:

c# - MVVM Binding popover isOpen in datagrid

C# 从带引号的字符串中删除分隔符

python - 尝试安装 psycopg2 时出现 "cannot find -lpq"

c# - 在 Entity Framework 5 C# 中添加记录

entity-framework - 在 Windows Azure 上将 SQL Server CE 4.0 与 Entity Framework 结合使用

c# - Dispatcher.Invoke 的竞争条件

regex - 使用正则表达式计算 SQL 查询中 WHERE 过滤器的数量

hibernate - org.hibernate.NonUniqueObjectException

c# - 使用 Entity Framework 6.1 CodeFirst 的 SQL Server 2014 内存优化表

c# - 如何在 C# 中使用多个事件处理程序 text_changed?