LINQ 方法的问题不返回任何结果
Posted
技术标签:
【中文标题】LINQ 方法的问题不返回任何结果【英文标题】:problems with LINQ method not returning any results 【发布时间】:2020-11-22 05:29:09 【问题描述】:目前我的列表中的 LINQ 查询未返回搜索结果。我试图向该方法传递一个字符串,它在其中搜索每个对象FirstName, LastName, and Username
字段。
这是我的方法:
public IEnumerable<Volunteer> Search(string key)
IEnumerable<Volunteer> searchResults = _volunteerList.Where(v => v.FirstName == key
|| v.LastName == key
|| v.Username == key);
return searchResults;
我已验证字符串 key
正在被传递到方法中,并且包含正确的值“Bob”。
这是我_volunteerList
中的对象列表:
new Volunteer id = 1, FirstName = "Bob", LastName = "Evans", Username = "BEvans", Password= "1991", StreetAddress = "1995 StreetName Ave", State = "FL", City = "Jacksonville", ZipCode = 32225, ApprovalStatus = "Approved",
new Volunteer id = 2, FirstName = "Jim", LastName = "Evans", Username = "JEvans", Password= "1992", StreetAddress = "1995 StreetName Ave", State = "FL", City = "Jacksonville", ZipCode = 32225, ApprovalStatus = "Approved"
对我来说,从我查找的所有内容来看,LINQ 语句的语法看起来是正确的,并且没有返回任何错误(至少在 VS19 中)。有什么我想念的吗?
提前致谢。
仅供参考:相关方法/代码:
Homecontroller - Search()
[HttpGet]
public ActionResult Search(string key)
IEnumerable<Volunteer> results = _volunteerRepository.Search(key);
ViewData.Model = results;
return View("SearchResults");
ManageVolunteers(查看)- 表单
<form method="get" asp-action="Search" >
<table>
<tr>
<td><input type="text" placeholder="Search" name="Key" value ="Bob" class="form-control"/> </td>
<td><input type="submit" value="Search" class="btn btn-primary"></td>
</tr>
</table>
</form>
【问题讨论】:
下断点调试时是否显示key的预期值? 无法重现。唯一想到的是大小写不同。 "bob" vs "Bob" == 比较区分大小写。 就像@Steve,我无法重现。我对区分大小写也有同样的看法。要检查的另一件事是在执行 where 语句之前 _volunteerList 是否有任何值。 【参考方案1】:坦率地说...我不知道我做了什么,但现在正确的输出显示在我的 SearchResults 视图中。
一切都是正确的。我不知道为什么,但在上传结果列表之前进行了几个小时的工作后,结果列表正确显示。
感谢您尝试提供的帮助。
【讨论】:
你应该接受你的答案(点击这个答案左边的复选框) 我计划...但根据 *** 网站 2 天不能接受我自己的答案 哦,是的,我忘了:) 因为这个问题和相关答案都不是可以以任何方式复制的东西,所以最好的方法是删除问题。没有未来的读者可以在这里找到任何价值。见xkcd.com/979【参考方案2】:您已将 _volunteerList
声明为 List<Volunteer>
或 IEnumerable<Volunteer>
?似乎存在一些类型转换问题。尝试在使用 IEnumerable<Volunteer>
的任何地方保留 List<Volunteer>
。看看这是否有效。
【讨论】:
【参考方案3】:我最近遇到了同样的问题,我所做的就是把它放在我的 IEnumerable 的末尾。一个 ToList();
IEnumerable<Volunteer> searchResults = _volunteerList.Where(v => v.FirstName == key
|| v.LastName == key
|| v.Username == key).ToList();
【讨论】:
这只是将结果转换为列表。它不能解决任何问题。 正如@Andy 提到的,如果 iinq 查询没有返回结果,则转换为 list 不会执行任何操作。投射到列表会带来不同的好处,例如可以对集合进行更改(IEnumerable 是只读的,总体开销较低),但这不是问题要问的。 @VytautasPlečkaitis -- 当然我知道列表是如何工作的。但简单地将集合转换为列表并不会神奇地使项目出现,这正是我想要传达的。 @Andy 我完全同意,该评论是针对 Otavio 的。以上是关于LINQ 方法的问题不返回任何结果的主要内容,如果未能解决你的问题,请参考以下文章