2010-03-15 79 views
1

我想将以下SQL查询转换为SubSonic查询。SubSonic别名/ Where子句

SELECT [dbo].[tbl_Agency].[ParentCompanyID] FROM [dbo].[tbl_Agency] WHERE REPLACE(PhoneNumber, ' ', '') LIKE REPLACE('%9481 1111%', ' ', '')

我以为我会不喜欢它的下方,但我不能让它产生有效的SQL。

 //SubSonic 
    string agencyPhoneNumber = "9481 1111"; 
    SubSonic.SqlQuery subQueryagencyPhoneNumber = new SubSonic.Select(Agency.ParentCompanyIDColumn.ColumnName); 
      subQueryagencyPhoneNumber.From(Agency.Schema.TableName); 

    //WHERE 
    subQueryagencyPhoneNumber.Where("REPLACE(" + Agency.PhoneNumberColumn.ColumnName + ", ' ', '')").Like("%" + agencyPhoneNumber + "%"); 

有没有人知道如何解决这个问题 - 我使用的是SubSonic 2.2。 我觉得我在这里吃了疯狂的药丸 - 这应该是直截了当的,对吧?

干杯, JohnBob

回答

1

我想你会需要类似的表达添加到内联SQL。
喜欢的东西:

var whereSql = string.Format("REPLACE({0}, ' ', '') Like '%{1}%'", Agency.PhoneNumberColumn.ColumnName, agencyPhoneNumber); 

subQueryagencyPhoneNumber.Where(whereSql); 

Calling an SQL function from a Subsonic.Select

+0

感谢您的评论,但这并没有奏效。 它不会将上述语句注册为有效约束。 – JohnBob 2010-03-16 00:17:06

+0

作为一个动态sql的存储过程,做起来并做到了。 blazergh!想在SubSonic中做到这一点啊。 – JohnBob 2010-03-16 01:31:32

+0

@JohnBob总是可以将它作为CodingHorror来保持代码中的所有逻辑 – 2010-03-16 09:42:57

1

看到一个类似的问题。如果出现最坏的情况与所描述的@http://subsonicproject.com/docs/CodingHorror

你仍然可以使用亚音速使用.CodingHorror()方法非常复杂的查询

只要你选择亚音速知道什么时候你转换集合的有效列名 - > .ExecuteAsCollection(),你就会好起来的,并且仍然能够使用你的活动记录。

当我真的有很大的复杂查询时,这为我节省了很多时间。只要确保您仍然使用参数并清理您的语句,以便您的输入被消毒。