首页 / C# / C#-Linq-从n个列表中返回常见项目
C#-Linq-从n个列表中返回常见项目
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#-Linq-从n个列表中返回常见项目,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2377字,纯文字阅读大概需要4分钟。
内容图文
我正在为我们的Intranet应用程序编写一个简单的搜索页面.当用户搜索n个单词时,我会创建n个命中列表,然后仅返回所有列表共有的结果.
我使用List< int>可以正常工作从而:
var list1 = new List<int> {1,2,3,4,5,8,10};
var list2 = new List<int> {3,5,6,9,10,11};
var list3 = new List<int> {3,4,5,10};
var listOfLists = new List<List<int>>{list1,list2,list3};
var results = listOfLists.Aggregate((prevList, nextList) => prevList
.Intersect(nextList)
.ToList());
results.Dump(); //correctly returns 3,5,10, which are common to all lists
但是,如果我用SearchResults类尝试此操作,则不会得到任何结果.这是代码:
//results from first search word "howard"
List<SearchResult> list1 = new List<SearchResult>();
list1.Add(new SearchResult ("a.html","howard kent"));
list1.Add(new SearchResult ("b.html","howard shaw")); //the common item
list1.Add(new SearchResult ("c.html","howard smith"));
list1.Add(new SearchResult ("d.html","howard moore"));
//results from second search word "shaw"
List<SearchResult> list2 = new List<SearchResult>();
list2.Add(new SearchResult ("e.html","jon shaw"));
list2.Add(new SearchResult ("b.html","howard shaw")); //the common item
list2.Add(new SearchResult ("f.html","chris shaw"));
//could be n further lists...
//make a list of lists
List<List<SearchResult>> searchLists = new List<List<SearchResult>>();
searchLists.Add(list1);
searchLists.Add(list2);
//find results that are common to all lists.
//Doesn't work - returns nil items, should return 1
var results = searchLists
.Aggregate((prevList, nextList) => prevList
.Intersect(nextList)
.ToList());
results.Dump();
}
class SearchResult
{
public string Url{get;set;}
public string SearchText { get; set; }
//constructor
public SearchResult(string url,string searchText)
{
Url = url;
SearchText = searchText;
}
我应该如何更改查询以返回所需的结果?
解决方法:
这是因为尽管SearchResult对象具有相同的数据,但它们不是相同的对象.您可以通过实现IEquatable< T>来解决此问题.接口. http://msdn.microsoft.com/en-us/library/ms131187(v=vs.110).aspx
就是
public class SearchResult : IEquatable<SearchResult>
{
public string Url{get;set;}
public string SearchText { get; set; }
public bool Equals(SearchResult other)
{
if (other == null)
return false;
return string.Concat(this.Url, this.SearchText).Equals(string.Concat(other.Url, other.SearchText), StringComparison.OrdinalIgnoreCase);
}
}
另一解决方案将是实现IEqualityComparer< T>.并将其传递给Enumerable.Intersect方法.
内容总结
以上是互联网集市为您收集整理的C#-Linq-从n个列表中返回常见项目全部内容,希望文章能够帮你解决C#-Linq-从n个列表中返回常见项目所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。