2013-06-19 60 views
0

我想在使用Vici.CoolStorage時使用複雜的sql查詢來獲取對象列表。它本身提供了一個特定的查詢語法,但它不足以滿足我的需求。在網站上有一個如何將自定義查詢結果映射到自定義對象的示例,但我想要的是獲取CSObject後代的列表(CSList),與CSObject.List()方法一樣。如何將自定義SQL查詢映射到冷存儲中的CSObjects?

回答

2

這是可能的,因爲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); 
    } 
} 
+0

謝謝!我不能稱之爲做事的微不足道,但它確實有效! – Danchoys

相關問題