LINQ to SQL - '选择'找不到

时间:2017-12-07 07:31:00

标签: asp.net-mvc linq-to-sql

我一直在寻找解决这个问题几个小时没有运气。

我有一个非常简单的场景 - 我在LINQ-to-SQL中尝试以下

 var qry = (from row 
   in DBConnect.SEARCHhash("test", "1234")  
    select row);

SEARCHhash是存储过程的地方 - 不幸的是,我甚至无法将.ToList()放在最后,因为IntelliSense显示以下错误

  

无法找到源类型' void'的查询模式的实现。 '选择'没找到。

我的所有其他存储过程都运行良好,只是这个没有用。

然后我记得当我将存储过程拖放到Designer时,我收到了以下警告

  

无法检测到以下存储过程的返回类型。在“属性”窗口中为每个存储过程设置返回类型。

enter image description here

所以,我打开属性并单击下拉列表,只有可用选项是int(int32)所以选择了int

enter image description here

但是现在我开始收到以下错误

  

找不到源类型' int'的查询模式的实现。 '选择'找不到

以下是Designer

中的代码
[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.SEARCHhash")]
        public int SEARCHhash([global::System.Data.Linq.Mapping.ParameterAttribute(Name="Keywords", DbType="VarChar(540)")] string keywords, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="UserId", DbType="NVarChar(128)")] string userId)
        {
            IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), keywords, userId);
            return ((int)(result.ReturnValue));
        }

我也开始比较我的存储过程,我注意到这个存储过程中有JOIN,当然它正在使用`FREETEXT'

这是我的存储过程代码:

SELECT 
    [dbo].[SEARCHMLinksData].PageID, 
    [dbo].[SEARCHMLinksData].PageTitle, 
    [dbo].[SEARCHMLinksData].PageDescription, 
    [dbo].[SEARCHMLinksData].PageType
FROM 
    [dbo].[SEARCHMLinksData] 
LEFT JOIN 
    [dbo].[SEARCHMLinksTags] ON [SEARCHMLinksData].PageID = [SEARCHMLinksTags].PageID
WHERE 
    (FREETEXT([SEARCHMLinksData].*, @Keywords) OR  
     FREETEXT([SEARCHMLinksTags].*,@Keywords) ) 
    AND
    ([SEARCHMLinksData].UserID = @UserId OR [SEARCHMLinksTags].[user_id] = @UserId)

任何想法或帮助将不胜感激

干杯

另外,我尝试了很多东西,包括以下内容 https://www.mssqltips.com/sqlservertip/1542/using-stored-procedures-with-linq-to-sql/ The return types for the following stored procedures could not be detected Could not find an implementation of the query pattern for source type 'System.Data.Entity.DbSet'

1 个答案:

答案 0 :(得分:0)

以防万一有人在寻找解决方案

在LINQ中无法使用FREETEXT,这就是我创建存储过程的原因,尽管在我的情况下似乎无法使用存储过程由于某种原因(我不知道为什么)虽然我找到的解决方案是

  

创建一个函数并使用LINQ

调用该函数

现在对我有用

我必须在功能中做一件事 - 而不是使用

(FREETEXT([SEARCHMLinksData].*,@Keywords) 

我必须使用

(FREETEXT([SEARCHMLinksData].Title,[SEARCHMLinksData].Description,@Keywords)

表示,列出所有被[名称]索引的列,因为它没有采用通配符

为什么这一切?我不知道,但这是我能找到的唯一解决方案

希望这有助于某人。