【问题标题】:LINQ to SQL - 'Select' not foundLINQ to SQL - 未找到“选择”
【发布时间】:2017-12-07 07:31:00
【问题描述】:

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

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

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

SEARCHhash 是一个存储过程 - 不幸的是,我什至不能将 .ToList() 放在最后,因为 IntelliSense 显示以下错误

找不到源类型“void”的查询模式的实现。未找到“选择”。

我所有的其他存储过程都可以正常工作,只是这个不行。

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

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

所以,我打开属性并单击下拉菜单,唯一可用的选项是 int(int32) 所以选择了 int

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

找不到源类型“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'

【问题讨论】:

  • 你能看看import System.Linq;是否加在你的cs文件里吗?
  • 嗨,是的using System.Linq; using System.Xml.Linq; using System.Data.Linq;

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


【解决方案1】:

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

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

创建一个函数并使用 LINQ 调用该函数

现在对我有用

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

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

我不得不使用

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

意思是,列出所有被 [name] 索引的列,因为它没有使用通配符

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

希望这对某人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多