【问题标题】:Advanced Search in Linq to SQL possible?可以在 Linq to SQL 中进行高级搜索吗?
【发布时间】:2009-03-16 00:23:11
【问题描述】:

如果在 Dynamic Linq 中不使用“LIKE”,当我尝试创建高级搜索查询时,它实际上对我来说毫无用处。

你们中的任何人在使用 Linq to SQL 时是如何克服这个高级搜索问题的?

我需要搜索以下字段类型,它们也可能为空:

  • 列表项
  • varchar(列 LIKE '%' + myText + '%')
  • 文本(列 LIKE '%' + myText + '%')
  • DateTime(列 >= myDate - 如果“myDate”当然不为空)
  • 整数(列 = myInt - 如果“myInt”当然不为空)
  • 布尔值

我也不能只使用 ExecuteQuery,因为这样我就没有真正的“实体”以及所有的关系/关联。

我只是不明白如何使用 Linq to SQL 做到这一点。我目前没有存储过程,所以如果我能用 Linq 解决这个问题,我宁愿没有一个存储过程。

【问题讨论】:

标签: linq-to-sql search


【解决方案1】:

要制作 LIKE 语句,您可以使用Contains 方法:

string myText = "test";
var query = dc.Table.Where(r=>r.Column.Contains(myText));

这会生成这样的 SQL 语句:

SELECT [t0].[Column], ... [t0].[ColumnN]
FROM [Table] AS [t0]
WHERE [t0].[Column] LIKE @p0

而@p0 参数将有"%test%" 作为值。

对于 Date 和 int 比较,如果我正确理解您想要什么,您可以这样做:

DateTime? myDate = new DateTime(2009, 3, 15);
var query = dc.Table.Where(r=> r.DateColumn > myDate || myDate == null );

因此,如果 myDate 为 null,则不会评估条件 DateColumn > myDate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2011-05-12
    • 2021-04-08
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多