0

我想在使用 Vici.CoolStorage 时使用复杂的 sql 查询来获取对象列表。它本身提供了特定的查询语法,但它的功能不足以满足我的需求。在网站上有一个如何将自定义查询结果映射到自定义对象的示例,但我想要的是获取 CSObject 后代的列表(CSList),与使用 CSObject.List () 方法获得的相同。

4

1 回答 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 回答