【问题标题】:Chain LINQ IQueryable, and end with Stored ProcedureChain LINQ IQueryable,并以存储过程结束
【发布时间】:2011-02-23 08:26:03
【问题描述】:

我通过 IQueryable 扩展方法在我的应用程序中链接搜索条件,例如:

public static IQueryable<Fish> AtAge (this IQueryable<Fish> fish, Int32 age)
{ 
    return fish.Where(f => f.Age == age);
}

不过,我还有一个全文搜索存储过程:

CREATE PROCEDURE [dbo].[Fishes_FullTextSearch]
@searchtext nvarchar(4000),
@limitcount int
AS
SELECT Fishes.* FROM Fishes
  INNER JOIN CONTAINSTABLE(Fishes, *, @searchtext, @limitcount)
  AS KEY_TBL ON Fishes.Id = KEY_TBL.[KEY]
  ORDER BY KEY_TBL.[Rank]

存储过程显然不会返回 IQueryable,但是,是否可以使用 IQueryable 以某种方式限制存储过程的结果集?

我正在设想类似 .AtAge(5).AboveWeight(100).Fishes_FulltextSearch("abc")。

在这种情况下,全文搜索应在我的 Fishes 表的较小子集上执行(按年龄和体重缩小)。

这样的事情可能吗?示例代码?

【问题讨论】:

    标签: c# linq linq-to-sql iqueryable


    【解决方案1】:

    如果您可以在视图中使用 ContainsTable,则 -that- 返回 IQueryable...

    【讨论】:

      【解决方案2】:

      我认为如果你这样做,它可能会起作用

      • Fishes_FulltextSearch("abc")创建另一个扩展方法
      • 在其中,您将 previos 方法(AtAge 和 AboveWeight)的结果集插入到时态表中
      • 在存储过程中使用这个临时表
      • 从存储过程返回所需的结果集
      • 并从新的扩展方法返回存储过程的结果集。

      希望这会有所帮助。

      【讨论】:

      • 临时代替临时
      猜你喜欢
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 2011-06-02
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多