0
我想在使用Vici.CoolStorage時使用複雜的sql查詢來獲取對象列表。它本身提供了一個特定的查詢語法,但它不足以滿足我的需求。在網站上有一個如何將自定義查詢結果映射到自定義對象的示例,但我想要的是獲取CSObject後代的列表(CSList),與CSObject.List()方法一樣。如何將自定義SQL查詢映射到冷存儲中的CSObjects?
我想在使用Vici.CoolStorage時使用複雜的sql查詢來獲取對象列表。它本身提供了一個特定的查詢語法,但它不足以滿足我的需求。在網站上有一個如何將自定義查詢結果映射到自定義對象的示例,但我想要的是獲取CSObject後代的列表(CSList),與CSObject.List()方法一樣。如何將自定義SQL查詢映射到冷存儲中的CSObjects?
這是可能的,因爲CSObjects被映射到表。 (作爲抽象類和使用反射等......)
如果你想能夠讀取相關對象,你可以定義延遲加載這些記錄的屬性。例如: -
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);
}
}
謝謝!我不能稱之爲做事的微不足道,但它確實有效! – Danchoys