LinqDB数据库查询数据,还是很方便的。

1. 添加Entity数据实体类

方便之后映射操作

     /// <summary>
/// 课件
/// </summary>
[DataContract]
[Table("Courseware")]
public class CoursewareInfo
{
[DataMember(Name = "LocalId")]
[PrimaryKey, Column("LocalId"), NotNull]
public string LocalId { get; set; } [DataMember(Name = "RemoteId")]
[Column("RemoteId")]
public string RemoteId { get; set; } [Column("Name")]
public string Name { get; set; }
}

2. 添加DB操作通用类

     public class DbProvider<TDB> where TDB : LinqToDB.Data.DataConnection, new()
{
private readonly string _connectionString;
private readonly Func<string> _getConnectionStringFunc; private string ConnectionString
=> string.IsNullOrEmpty(_connectionString) ? _getConnectionStringFunc() : _connectionString; public DbProvider(Func<string> getConnectionStringFunc)
{
_getConnectionStringFunc = getConnectionStringFunc;
}
public TReturn Execute<TReturn>(Func<TDB, TReturn> execute)
{
TDB db = null;
try
{
db = (TDB)Activator.CreateInstance(typeof(TDB), new SQLiteDataProvider(), ConnectionString);
return execute(db);
}
catch (Exception ex)
{
return default(TReturn);
}
finally
{
db?.Dispose();
}
}
}

3. 添加指定数据库的映射连接类

     public partial class CoursewareInfoDb : DataConnection
{
public ITable<CoursewareInfo> Coursewares => GetTable<CoursewareInfo>(); public CoursewareInfoDb()
{
InitDataContext();
} public CoursewareInfoDb(string configuration)
: base(configuration)
{
InitDataContext();
} public CoursewareInfoDb(IDataProvider dataProvider, string connectionString)
: base(dataProvider, connectionString)
{
InitDataContext();
} partial void InitDataContext();
}

4. 添加数据库查询辅助类

这里是将数据库放在程序启动目录下,通过绝对路径引用。

     public class CoursewareSqliteDataReader
{
private static readonly string DbName = "CoursewareCacheData.db";
private readonly DbProvider<CoursewareInfoDb> _coursewareDbProvider; public CoursewareSqliteDataReader()
{
var dbPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Dbs\\{DbName}"); if (!File.Exists(dbPath))
{
throw new InvalidOperationException("路径下不存在数据库文件");
}
_coursewareDbProvider = new DbProvider<CoursewareInfoDb>(() => $"Data Source={dbPath}");
} public List<CoursewareInfo> GetCoursewares()
{
return _coursewareDbProvider.Execute(db => db.Coursewares.ToList());
}
public List<CoursewareInfo> GetCoursewares(string queryText)
{
return _coursewareDbProvider.Execute(db => db.Coursewares.Where(i=>i.Name.Contains(queryText)).ToList());
}
}

LinqDB 查询数据库的更多相关文章

  1. SQL Server中查询数据库及表的信息语句

    /* -- 本文件主要是汇总了 Microsoft SQL Server 中有关数据库与表的相关信息查询语句. -- 下面的查询语句中一般给出两种查询方法, -- A方法访问系统表,适应于SQL 20 ...

  2. SQL查询数据库中所有指定类型的字段名称和所在的表名

    --查询数据库中所有指定类型的字段名称和所在的表名 --eg: 下面查的是当前数据库中 所有字段类型为 nvarchar(max) 的字段名和表名 SELECT cols.object_id , co ...

  3. MySql 查询数据库中所有表名

    查询数据库中所有表名select table_name from information_schema.tables where table_schema='csdb' and table_type= ...

  4. ArcGIS Javascript查询数据库并添加到地图上

    将数据存放到数据库中,动态的调取比较灵活,数据变动后不需要改变图层的属性表. 此处采用的方法是通过jquery查询数据库,并将数据库的结果生产json串返回给js,在js中动态解析json串增加点至地 ...

  5. 【mysql元数据库】使用information_schema.tables查询数据库和数据表信息

    概述 对于mysql和Infobright等数据库,information_schema数据库中的表都是只读的,不能进行更新.删除和插入等操作,也不能加触发器,因为它们实际只是一个视图,不是基本表,没 ...

  6. SQLSERVER | 查询数据库中所有的表的名字 | 查询数据库中的所有数据库名

    SQLSERVER 1.查询某个数据库中所有的表名:  SELECT Name FROM SysObjects Where XType='U' ORDER BY Name 2.查询数据库中的所有数据库 ...

  7. Java 通过JDBC查询数据库表结构(字段名称,类型,长度等)

    Java 通过JDBC查询数据库表结构(字段名称,类型,长度等) 发布者:唛唛家的豆子   时间:2012-11-20 17:54:02   Java 通过JDBC查询数据库表结构(字段名称,类型,长 ...

  8. DBA日常SQL之查询数据库运行状况

    ,) Day, ,),,)) H00, ,),,)) H01, ,),,)) H02, ,),,)) H03, ,),,)) H04, ,),,)) H05, ,),,)) H06, ,),,)) H ...

  9. SQL查询数据库是否存在

    在实际工作中会遇到通过SQL查询数据库是否存在的情况,下面一些语句可以提供一些帮助,本文的语句是在SQL08R2中测试的 1,查询当前数据库服务器所有数据库 select *  From master ...

随机推荐

  1. js前端数据验证JS工具

    var regexEnum = { intege : "^-?[1-9]\\d*$", // 整数 intege1 : "^[1-9]\\d*$", // 正整 ...

  2. PAT(甲级)2017年春季考试

    PAT(甲级)2017年春季考试 A.Raffle for Weibo Followers #include<bits/stdc++.h> using namespace std; int ...

  3. alloc 和 init都做了什么验证。

    结论: alloc负责分配内存和创建对象对应的isa指针: init只是返回alloc生成的对象.  所以alloc后,多次调用init,返回的对象是同一个! 代码如下: // // main.m / ...

  4. 如何彻底理解Java抽象类 为什么要用抽象类 什么情况下用抽象类

    如何彻底理解Java抽象类 为什么要用抽象类 什么情况下用抽象类 呐,到底什么是抽象类,有时明明一个普通类就可以解决了,为啥非得整个抽象类,装逼吗 我曾带着这样的疑惑,查了很多资料,看了很多源码,写了 ...

  5. luogu P3913 车的攻击 |数学

    题目描述 N×N 的国际象棋棋盘上有KK 个车,第ii个车位于第R_i行,第C_i列.求至少被一个车攻击的格子数量. 车可以攻击所有同一行或者同一列的地方. 输入格式 第1 行,2 个整数N,K. 接 ...

  6. 使用Python进行防病毒免杀

    很多渗透工具都提供了权限维持的能力,如Metasploit.Empire和Cobalt Strike,但是都会被防病毒软件检测到这种恶意行为.在探讨一个权限维持技巧的时候,似乎越来越多的人关注的是,这 ...

  7. [TimLinux] JavaScript 事件

    1. 简介 JavaScript与HTML之间的交互式通过事件来实现的,事件是文档或浏览器窗口中发生的一些特定的交互瞬间,使用事件处理程序来预订事件,从而在事件发生时,能够执行特定的代码.事件使页面的 ...

  8. TypeScript躬行记(2)——接口

    在传统的面向对象语言中,接口(Interface)好比协议,它会列出一系列的规则(即对行为进行抽象),再由类来实现这些规则.而TypeScript中的接口更加灵活,除了包含常规的作用之外,它还能扩展其 ...

  9. 深入学习 Arduino LinkedList库(一个变长的集合类数组)

    QQ技术互动交流群:ESP8266&32 物联网开发 群号622368884,不喜勿喷 单片机菜鸟博哥CSDN 1.前言 博主是做Android App开发出身的,所以对Java这门语言算是有 ...

  10. 模拟摄像头,AV视频信号线解码,PAL制 NTSC,输入解码显示,终于搞定,记录下!

    模拟摄像头,AV视频信号线解码,PAL制 NTSC,输入解码显示,终于搞定,记录下! 咱们常用的摄像头,监控等,大多数都是AV信号,国内制式都是PAL,采用同轴,传输,这样的好处在于,传输距离可以很长 ...