- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前在 ASP.NET 页面上有一个 LinqDataSource,它用作 FormView 的数据源。我需要根据通过查询字符串传递的参数动态更改 where
子句。除了我希望最终用户能够使用通配符外,我的工作正常:
看起来很简单,我需要做的就是使用 LIKE 运算符并将 ?
替换为 _
(匹配单个字符)和 *
使用 %
(匹配所有字符)。
下面是执行花哨步法的方法(在 PageLoad
上调用),除了我的通配符被转义外,它工作得很好。
private void ApplyFilter(ref LinqDataSource lds)
{
if (Request.QueryString.Keys.Count > 0)
{
string where = "";
int counter = 0;
foreach (string key in Request.QueryString.Keys)
{
if (Request.QueryString[key] != "")
{
if (counter == 0)
{
where += key + ".Contains(@" + key + ")";
}
else
{
where += " AND " + key + ".Contains(@" + key + ")";
}
lds.WhereParameters.Add(key, Request.QueryString[key].Replace("?", "_").Replace("*", "%"));
counter++;
}
}
if (where != "")
lds.Where = where;
}
}
下面是从此查询字符串生成的查询:.aspx?LOOP_DESCRIPTION=*&LOOP=*&AREA=01
exec sp_executesql N'SELECT [t1].[AREA], [t1].[LOOP], [t1].[LOOP DESCRIPTION] AS [LOOP_DESCRIPTION]
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY [t0].[AREA], [t0].[LOOP], [t0].[LOOP DESCRIPTION]) AS [ROW_NUMBER], [t0].[AREA], [t0].[LOOP], [t0].[LOOP DESCRIPTION]
FROM [dbo].[INSTRUMENT LOOP DESCRIPTION] AS [t0]
WHERE ([t0].[LOOP DESCRIPTION] LIKE @p0 ESCAPE ''~'') AND ([t0].[LOOP] LIKE @p1 ESCAPE ''~'') AND ([t0].[AREA] LIKE @p2)
) AS [t1]
WHERE [t1].[ROW_NUMBER] BETWEEN @p3 + 1 AND @p3 + @p4
ORDER BY [t1].[ROW_NUMBER]',N'@p0 nvarchar(4000),@p1 nvarchar(4000),@p2 nvarchar(4000),@p3 int,@p4 int',@p0=N'%~%%',@p1=N'%~%%',@p2=N'%01%',@p3=0,@p4=1
正如您从参数分配中看到的那样,我的通配符正在使用波浪字符进行转义:
@p0=N'%~%%',@p1=N'%~%%',@p2=N'%01%'
我的问题是,是否可以阻止 _
和 %
字符被转义?
最佳答案
请尝试 url 解码 Request.QueryString[key]
例子:
HttpUtility.UrlDecode(Request.QueryString[key]);
关于c# - 将通配符与 LinqDataSource 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11512539/
页面中有一个GridView和一个LinqDataSource,以及一些按钮,它们的操作与GridView及其LinqDataSource无关。为什么在这些按钮的每次回发时,LinqDataSourc
为什么 LinqDataSource 中 Select 属性的语法与我会在 C# 中内联编写的 Linq 如此不同?我的意思是: new (Id As MyId, Name As MyName) 对比
我想在页面上使用 LinqDataSource 控件并限制返回的记录数量。我知道如果我使用代码隐藏我可以做这样的事情: IEnumerable values = Enumerable.Range(0,
我在我的项目中添加了一个 LinqToSQL 类并将它放在我的 App_code 文件夹中。 然后,我将 LinqDataSource 添加到新网页并尝试将其配置为使用此类,但它并未在 DataCon
将我的第一次尝试作为使用 LinqDataSource 的 OnSelecting 方法以便我可以指定更复杂的查询,我写了这样的: protected void CategoriesDataSourc
我有一个数据库,并且创建了一个 DBML Linq-to-SQL 文件来表示该数据库。我创建了一个新的 aspx 页面,并在其上放置了 linqdatasource 和 formview 控件。当我配
我正在尝试创建一个 LinqDataSource 以绑定(bind)到 ASP.NET 表单中的 DropDownList。我只想根据日期显示元素(这是数据库中的字段之一)。 基本上,我要显示的元素是
我目前在 ASP.NET 页面上有一个 LinqDataSource,它用作 FormView 的数据源。我需要根据通过查询字符串传递的参数动态更改 where 子句。除了我希望最终用户能够使用通配符
我有一个绑定(bind)到 LDS 之一的下拉列表。这是相关代码: LinqDataSource3 的代码是: 现在我得到这种类型的值: {Name = John} {Name = Eric
我目前正面临一个旧项目的奇怪问题。该项目使用 FormView 来编辑数据。 FormView 绑定(bind)到 LinqDataSource。更新编辑的对象后,我确实收到了 System.Data
在 C#.net 中,我有以下数据源设置,我试图在后面的代码中动态分配一个 WHERE 子句... 后面的代码看起来像这样...... LinqDataSource1.Where = "MyDat
我目前正在使用 LinqToSQL 开发 ASP.NET 4.5 应用程序。我使用 asp:GridView 控件。在我的数据源查询方法中,我需要从 SQL Server 中查询几乎相同字段的 2 个
如何从 LinqDataSource 获取 DataTable? 我找到了 DataTableExtensions.CopyToDataTable() 方法,但不知道如何将其与 LinqDataSou
我需要为我的 LinqDataSource 创建一个 WHERE 子句这取决于当前登录的用户。当然,我可以在代码隐藏中访问当前登录的用户,我特别需要用户 ID 才能从数据库中仅获取属于他/她的数据。
是否有一些优雅的方法可以向与 LinqDataSource 绑定(bind)的 DropDownList 添加一个空选项? 最佳答案 以下是在列表顶部添加值的方法。它可以是一个空字符串,也可以是一些文
我有一个 Linq 数据源,它通过名为 SubmitTo 的字段对表中的记录进行分组:路由。我的选择语句是这样的——“新的(键作为 SubmitTo,Count() 作为计数,它作为路由)”。现在 S
我在使用 Paging 和 LinqDataSource 作为数据源获取 Gridview 中显示的项目的总行数时遇到问题。 我尝试了几种方法: protected void GridDataSour
我有两个表: Entity ID (PK, int) Name Users Entity_ID (FK to the Entity.ID) FName LName 现在我想使用 QueryString
我正在使用 LinqDataSource 来填充 ASP.NET 中的基本 GridView。用户可以过滤结果,因此我在 LinqDataSource 中使用了一些 WhereParameters 和
我有两个表: 订单 OrderProducts - 一个订单可以有 1 到多个与之关联的 orderProducts 记录。 我想做的(未成功)是使用 LinqDataSource 实现 GridVi
我是一名优秀的程序员,十分优秀!