我在亚音速论坛上问过以下问题,但似乎只得到一个回复,所以我想我也会在这里发帖,看看是否有人可以对这个问题有所了解......
我希望使用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如果可能,以便我可以利用分页功能等。
有什么想法吗?
答案 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,','))“))