无法使用FirstOrDefault方法进行搜索

时间:2017-07-11 13:24:31

标签: c# sql-server linq asp.net-web-api

我们需要一个简单的Web-API来从sql server获取数据。 由于我们的公司政策,它应该在IIS上运行。

我无法找到完成(免费)的解决方案。因此我在google搜索时遇到了这个解决方案 - > https://www.youtube.com/watch?v=nMGlaiNBbNU

几乎所有人都工作正常。我可以从我的表中获取完整列表。

我唯一无法解决的问题是。通过它只能获得一个数据集是不可能的 http://localhost:12345/api/GHServer/searchstring

SEARCHSTRING应该是我表中的有效服务器名称。但是,我总是再次获得完整列表,而不是单个数据集。这可能是什么原因?

这是我的controller.cs

namespace GHServerDataAPI.Controllers
{
    public class GHServerController : ApiController
    {

        public View_GHServerExportWithNet Get(String Server)
        {
            using (GHServerDevEntities entities = new GHServerDevEntities())
            {
                return entities.View_GHServerExportWithNet
                               .FirstOrDefault(S => S.Server == Server);
            }
        }


        public IEnumerable<View_GHServerExportWithNet> Get()
        {
            using(GHServerDevEntities entities = new GHServerDevEntities())
            {
                return entities.View_GHServerExportWithNet.ToList();
            }
        }
     }
}

IEnumerable<View_GHServerExportWithNet> Get() - &gt;按预期工作。

public View_GHServerExportWithNet Get(String Server) - &gt;虽然我确定我提供了有效的搜索字符串,但是无法正常工作或无法找到任何匹配项。

2 个答案:

答案 0 :(得分:1)

如果在Visual Studio上进行调试,则可以使用诊断工具。从那里你可以看到ADO行动。从本质上讲,您将看到实体框架转换为SQL查询。获取生成的查询并针对SQL Server运行它。

如果您没有看到诊断工具

调试 - &gt; Windows - &gt;显示诊断工具

此外,我认为您没有达到接受字符串参数的方法。在那里设一个断点,我几乎可以肯定你不会打它。

如果是这种情况,请尝试

[Route("{server}"]
public View_GHServerExportWithNet GetByName(string server) { ... }

答案 1 :(得分:0)

看起来你无法击中那条路线。

将以下两个属性添加到您的方法

[Route("GHServer/{Server}")]
[HttpGet]
public View_GHServerExportWithNet Get(String Server)

在WebAPIConfig中启用属性路由,如下所述:

public static class WebApiConfig 
{
public static void Register(HttpConfiguration config) 
{ 
     // Web API routes 
     config.MapHttpAttributeRoutes();
     // Other Web API configuration not shown.
}
}

如果这不起作用,请尝试将服务器字符串与&#34; ToUpper()&#34;进行比较。如下:

return entities.View_GHServerExportWithNet.FirstOrDefault(S => 
S.Server.Trim().ToUpper() == Server);