【问题标题】:how to Get by Id data from database Blazor C#如何从数据库 Blazor C# 中获取 Id 数据
【发布时间】:2021-11-09 20:36:30
【问题描述】:

已经开始使用 blazor 服务器端进行 crud 从数据库获取数据

我现在正在创建一个页面,我将在其中查看详细信息并编辑列表中的一项

我得到了我想要显示的项目的 ID,但是我的粗鲁解决方案给了我一个对象列表,而不仅仅是我需要的一个......

我得到了我的 SqlDataAccess,我在其中编写了两个主要功能(加载 -> QueryAsync 和保存 -> ExecuteAsync),其界面如下:

我得到了一个 FiledbData 类,我从这里调用 db,如下所示:

我现在只想向数据库询问 getbyId 之类的一项,而不是获取所有数据...

【问题讨论】:

    标签: c# sql-server database blazor-server-side data-access-layer


    【解决方案1】:

    您可以使用parameterized queries 来执行 where 子句。

    因此GetFile 方法应该是这样的:

    public Task<FileModel> GetFilebyId(int id)
    {
        string sql = "select * from dbo.file.. where Id = @Id";
        return _db.LoadSingleResult<FileModel, dynamic>(sql, new  {Id = id });
    }
    

    您还需要添加一个新方法LoadSingleResult,如下所示(除try 部分之外的其他部分与您的LoadData 方法类似):

    public async Task<T> LoadSingleResult<T,U>(string sql, U parameters)
    {
       .
       .
       .
       try{
           var data=await connection.QueryAsynch<T>(sql, parameters);
           reurn data.Single();
       }
       .
       .
       .
    }
    

    注意:

    • id 列假定为Id
    • id 列假定为integer

    你也可以使用QuerySingleOrDefaultAsync

    【讨论】:

    • 谢谢你@Mehrdad Dowlatabadi 的回答,很清楚而且有效!
    【解决方案2】:

    在您的 DB SQL 查询中添加 where 子句并创建 GetFiles() 的重载,该重载采用将插入 SQL 查询的 ID 值:

    public Task<List<FileModel>> GetFile(Guid id)
    {
        string sql = $"select * from myTable where Id = '{id:D}'";
    
        return _db.LoadData<FileModel, dynamic>(sql, new  { });
    }
    

    【讨论】:

    • 感谢您的回答@Andrew H,没关系,但我不要求列表...您的代码返回给我一个 List 一个项目...我的问题是如何只返回一个 FileModel 而不是 List...
    • 您可以使用 LINQ 使用谓词选择单个项目:myList.Select(item => item.Property == SOME_VALUE);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 2021-10-09
    • 2017-12-24
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多