【问题标题】:Unable to search with FirstOrDefault Method无法使用 FirstOrDefault 方法进行搜索
【发布时间】:2017-07-11 13:24:31
【问题描述】:

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

我找不到完整的(免费)解决方案。因此我在谷歌搜索时找到了这个解决方案 - > 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&lt;View_GHServerExportWithNet&gt; Get() -> 按预期工作。

public View_GHServerExportWithNet Get(String Server) -> 没有任何作用或无法找到任何匹配项,尽管我确定我提供了一个有效的搜索字符串。

【问题讨论】:

  • 我不确定是什么问题。您能否添加您看到的异常或预期与实际结果?

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


【解决方案1】:

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

如果您没有看到诊断工具

调试 --> Windows --> 显示诊断工具

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

如果是这样,请尝试

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

【讨论】:

  • 同意 - 如果该方法返回整个列表,那么您没有达到预期的过载
【解决方案2】:

看起来你无法到达那条路线。

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

[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.
}
}

如果这不起作用,请尝试将服务器字符串与“ToUpper()”进行比较,如下所示:

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

【讨论】:

  • 好的,我试过了。但结果是一样的。很抱歉,有人不允许我在这里以适当的方式回答。因为我正在制作“垃圾邮件”...... grrrrr!是的,我是 C# 的初学者。任何人都会从底层开始......如果这里有任何人是开发极客,我们不需要这个平台......
  • 我看了那个视频..你能在Get方法中试试这个吗?返回entities.View_GHServerExportWithNet.ToList() .FirstOrDefault(S => S.Server == Server);。也请您显示此类文件 View_GHServerExportWithNet 的代码
猜你喜欢
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 2018-10-26
  • 2021-05-03
  • 2015-04-19
  • 2016-01-09
  • 2020-01-12
相关资源
最近更新 更多