我想在使用 Vici.CoolStorage 时使用复杂的 sql 查询来获取对象列表。它本身提供了特定的查询语法,但它的功能不足以满足我的需求。在网站上有一个如何将自定义查询结果映射到自定义对象的示例,但我想要的是获取 CSObject 后代的列表(CSList),与使用 CSObject.List () 方法获得的相同。
问问题
182 次
1 回答
2
这是可能的,因为 CSObject 被映射到表。(作为抽象类并使用反射等......)
如果您希望能够读取相关对象,您可以定义延迟加载这些记录的属性。例如:
public class MyCustomQueryResult
{
public int SomeId;
public string SomeStringField;
public int SomeScalar;
public CSList<MappedObject> MappedObjects
{
get { 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);
}
}
于 2013-06-20T07:26:54.830 回答