从Subsonic.Select调用SQL函数

时间:2009-03-30 15:04:32

标签: subsonic

我在亚音速论坛上问过以下问题,但似乎只得到一个回复​​,所以我想我也会在这里发帖,看看是否有人可以对这个问题有所了解......

我希望使用Select工具(或查询工具)通过SubSonic创建以下SQL语句..它使用名为“SPLIT()”的自定义函数:

  

SELECT * FROM VwPropertyList
  WHERE VwPropertyList.idCreatedBy = 123
  AND VwPropertyList.idCounty = 45
   AND 29 IN(选择项目来自SPLIT(DistrictGroupList,','))

(此SQL的最后一部分使用SPLIT函数)

我的亚音速等效物看起来如下......

  

将我的选择视为新的SubSonic。选择
  mySelect.From(VwPropertyList.Schema)
  mySelect.Where(VwPropertyList.Columns.IdCreatedBy).IsEqualTo(123)
  mySelect.And(VwPropertyList.Columns.IdCounty).IsEqualTo(45)
   mySelect.And(29).In(New SubSonic.Select(“Item”)。From(“SPLIT(”)   &安培;   VwPropertyList.Columns.DistrictGroupList   &安培; “,',')”))

由于最后一部分,这不起作用..如何在我的Subsonic.Select中添加“ AND 29 IN(SELECT Item FROM SPLIT(DistrictGroupList,','))” ?

我从亚音速论坛得到的回应表明我取消了Subsonic.Select并用硬编码的InlineQuery()语句替换..如:

  

Dim SQL as String =“Select”&   VwPropertyList.Columns.Item
SQL = SQL   &安培; “来自”&   VwPropertyList.Schema.TableName
SQL =   SQL& “哪里”&   VwPropertyList.Columns.IdCreatedBy& “   = @CreatedBy“
SQL = SQL&”和“& VwPropertyList.Columns.IdCounty&”=   @County“
SQL = SQL&”和   @DistrictGroup IN(选择项目来自   SPLIT(DistrictGroupList, '')“

     

项目=   SubSonic.InlineQuery()。ExecuteTypedList(中   MyItem)(SQL,123,45,29)

我更愿意使用SubSonic.Select如果可能,以便我可以利用分页功能等。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

你可以做John的建议,或者你可以使用我们的InlineQuery编写SQL - 它允许你编写原始SQL并传入params:

var qry = new InlineQuery(“SELECT * FROM table WHERE column = @ param”,value)

答案 1 :(得分:1)

您可以尝试使用原始查询对象(2.1之前版本)(未经测试,从内存中):

Query q = new Query(VwPropertyList.Schema.TableName);
q.WHERE("29 IN (SELECT Item FROM SPLIT(DistrictGroupList, ','))");

// pass q.ExecuteReader() to the Load() method of your view.

答案 2 :(得分:0)

我建议你使用原始的Query对象,因为你正在寻找分页。内联查询没有任何允许分页的方法。

如果您绝对想要使用Subsonic.Select,您可以对这两个想法进行网格化并运行内联查询以获取值列表,然后使用Regular Subsonic.Select并将检索到的值传递给选择案例,但之后您会两次去db。

另一方面,我更喜欢阅读使用流畅界面编写的Subsonic.Select语句,即

SubSonic.Select.AllColumnsFrom() 。凡(VwPropertyList.Columns.IdCreatedBy).IsEqualTo(123) 。而(VwPropertyList.Columns.IdCounty).IsEqualTo(45) .ExecuteAsCollection();

答案 3 :(得分:0)

感谢您的回复。

我最终做了InlineQuery并重新编写了通常由Subsonic.Select生成的分页代码......不是最好的解决方案,但似乎有效。

如果我能做到这样的事情会很好:

  

Dim s As New SubSonic.Select
  s.From(VwPropertyList.Schema)
  sWhere(VwPropertyList.Columns.IdCreatedBy).IsEqualTo(123)
  砂(VwPropertyList.Columns.IdCounty).IsEqualTo(45)
  的 s.And(29)。在(新   InlineQuery(“(SELECT Item FROM。)   SPLIT(DistrictGroupList,','))“))