Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将自定义sql查询映射到cool storage中的CSObject?_C#_Sql_Orm_Coolstorage - Fatal编程技术网

C# 如何将自定义sql查询映射到cool storage中的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

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

这是可能的,因为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); }
    }
}
公共类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);
}
}

谢谢!我不能说这是一种琐碎的做事方式,但它确实有效!