使用Entity Framework 4进行全文+空间搜索

时间:2010-04-28 15:35:09

标签: entity-framework entity-framework-4

假设我有一个带有名为Restaurants的表的SQL 2005数据库。 Restaurants表格包含以下列:

  • RestaurantId
  • 名称
  • 纬度
  • 经度

我想让用户按名称和/或地址搜索餐馆。如何编写LINQ查询以支持此功能?我需要能够支持用户不输入姓名或地址的可能性,只需要输入姓名,地址或姓名和地址。

我最初的想法是编写一个存储过程来计算两个lat / long对之间的距离,以及一个表值函数,用于调用FREETEXTTABLE并在我的查询中使用一些条件Join调用。但是,实体框架4似乎不支持表值函数。

2 个答案:

答案 0 :(得分:1)

你当然可以写a proc which returns entity types。实际上,在EF 1中,这是触发器的唯一选择。 proc返回一组值,而不是表,但我看不出你确实需要它。

您还可以使用Context.ExecuteStoreQuery在EF 4中执行自由格式的T-SQL。

答案 1 :(得分:1)

此时您无法编写支持地理空间查询的任何LINQ - 无论是EF还是LinqToSql。这是因为没有LINQ语法可以处理SQL Server 2008中存在的特殊ST<whatever>空间语法。(例如STIntersects(..)

您需要编写一个存储过程,然后您可以通过EF进行访问。

如果您希望在结果中返回Sql GEOGRAPHY字段,则需要返回VARBINARY(MAX)我认为C#代码的等效字段类型。

希望这有助于。