C# 如何将自定义sql查询映射到cool storage中的CSObject?
我想在使用Vici.CoolStorage时使用复杂的sql查询来获取对象列表。它本身提供了一种特定的查询语法,但它的功能还不足以满足我的需要。在该网站上有一个示例,说明如何将自定义查询结果映射到自定义对象,但我想要的是获得CSObject子体的列表(CSList),与使用CSObject.list()方法获得的结果相同。这是可能的,因为CSObject映射到表。(作为抽象类并使用反射等) 如果希望能够读取相关对象,可以定义延迟加载这些记录的属性。例如:C# 如何将自定义sql查询映射到cool storage中的CSObject?,c#,sql,orm,coolstorage,C#,Sql,Orm,Coolstorage,我想在使用Vici.CoolStorage时使用复杂的sql查询来获取对象列表。它本身提供了一种特定的查询语法,但它的功能还不足以满足我的需要。在该网站上有一个示例,说明如何将自定义查询结果映射到自定义对象,但我想要的是获得CSObject子体的列表(CSList),与使用CSObject.list()方法获得的结果相同。这是可能的,因为CSObject映射到表。(作为抽象类并使用反射等) 如果希望能够读取相关对象,可以定义延迟加载这些记录的属性。例如: public class MyCusto
public class MyCustomQueryResult
{
public int SomeId;
public string SomeStringField;
public int SomeScalar;
public CSList<MappedObject> MappedObjects
{
get { return MappedObject.List("SomeId = @SomeId", "@SomeId", SomeId); }
}
}
公共类MyCustomQueryResult
{
公共int-SomeId;
公共字符串字段;
公共国际贸易;
公共CSList映射对象
{
获取{return MappedObject.List(“SomeId=@SomeId”,“SomeId”,SomeId);}
}
}
然后你可以这样使用它:
string sqlQuery = "SELECT a.SomeId, b.SomeString, COUNT(*) AS SomeScalar"
+ "FROM tblA a"
+ "INNER JOIN tblB b ON a.SoneId = b.SomeId"
+ "GROUP BY a.SomeId, b.SomeString"
+ "WHERE b.SomeField = @SomeParameter";
MyCustomQueryResult[] entries = CSDatabase.RunQuery<MyCustomQueryResult>(sqlQuery, new {SomeParameter:"123456"});
foreach (MyCustomQueryResult entry in entries)
{
foreach (MappedObject mappedObject in entry.MappedObjects)
{
DoSomethingUseful(mappedObject);
}
}
string sqlQuery=“选择a.SomeId、b.SomeString、COUNT(*)作为SomeScalar”
+“来自tblA a”
+“a.SoneId=b.SomeId上的内部联接tblB b”
+“按a.SomeId、b.SomeString分组”
+“其中b.SomeField=@SomeParameter”;
MyCustomQueryResult[]entries=CSDatabase.RunQuery(sqlQuery,新的{SomeParameter:“123456”});
foreach(条目中的MyCustomQueryResult条目)
{
foreach(条目中的MappedObject MappedObject.MappedObjects)
{
dosomethingusive(mappedObject);
}
}
谢谢!我不能说这是一种琐碎的做事方式,但它确实有效!