ServiceStack OrmLite 数据库查询 (翻译+总结)


执行SQL语句:

int result = db.SqlScalar<int>("SELECT OBJECT_ID(@name)", new { name = "SomeName" });



继承表的实现 (存储于同一个表中)

[Alias("Table")]    
public abstract class MyBaseClass
{
    public String Name { get; set; }
    public String Name1 { get; set; }
    public String Name2 { get; set; }
}

[Alias("Table")]    
public class MyDerivedClassA : MyBaseClass {}

[Alias("Table")]    
public class MyDerivedClassB : MyBaseClass {}



格式化查询:

     

   db.SelectFmt<Person>("Age > {0}", 40);
     Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"Id\", \"FirstName\", \"LastName\", \"Age\" FROM \"Person\" WHERE Age > 40"));
     
     db.SelectFmt<Person>("SELECT * FROM Person WHERE Age > {0}", 40);
     Assert.That(db.GetLastSql(), Is.EqualTo("SELECT * FROM Person WHERE Age > 40"));


这两种方法是等效的,还可以通过拼接字符串的方法,构造出复杂的查询条件,第一个参数中可以加多个项{0} {1} {2}



返回指定字段的列表:

     

      db.Lookup<int, string>(db.From<Person>().Select(x => new { x.Age, x.LastName }).Where(q => q.Age < 50));
      Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"Age\",\"LastName\" \nFROM \"Person\"\nWHERE (\"Age\" < 50)"));
      
      db.Lookup<int, string>("SELECT Age, LastName FROM Person WHERE Age < @age", new { age = 50 });
      Assert.That(db.GetLastSql(), Is.EqualTo("SELECT Age, LastName FROM Person WHERE Age < @age"));
      
      db.LookupFmt<int, string>("SELECT Age, LastName FROM Person WHERE Age < {0}", 50);
      Assert.That(db.GetLastSql(), Is.EqualTo("SELECT Age, LastName FROM Person WHERE Age < 50"));


两种方式等效,可以使用类指定字段名,也可以字符串中指定




查询并且生成集合:


1 直接返回字典类型结果

Dictionary<int, string> trackIdNamesMap = db.Dictionary<int, string>(
    "select Id, Name from Track")

结构是字典类型,其中的Key来自于数据表的Id字段,value来自于数据表的Name字段,其中的Key也可以使用string类型的字段。value也可以使用其他类型字段。



2 直接返回字典类型结果 , 并且将结果分组

Lookup returns an Dictionary<K, List<V>> made from the first two columns:
Dictionary<int, List<string>> albumTrackNames = db.Lookup<int, string>(
    "select AlbumId, Name from Track")


结果是字典类型,其中的键是来自数据表的AlbumId字段,value是一个列表,这个类别是根据前边的AlbumId字段进行分组的,每个键值下有数目不等的Name的列表。

本文出自 “LifeStage” 博客,请务必保留此出处http://soaop.blog.51cto.com/6164600/1608479

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。