链LINQ IQueryable,以存储过程结束

时间:2010-05-24 17:53:08

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

我通过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表的较小子集上执行(按年龄和重量缩小)。

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

2 个答案:

答案 0 :(得分:0)

我认为如果你

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

希望这有帮助。

答案 1 :(得分:0)

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