[英]C# how to find a value in a List collection
我有一个列表,此列表包含以下类的集合
public class MyFile
{
public string FileName
{
get;
set;
}
public int Position
{
get;
set;
}
}
因此,列表的定义将如下所示:
private List<MyFile> MyFiles = new List<MyFile>();
我还可以使用以下方法搜索集合:
MyFile tmpFile = MyFiles.Find(delegate(MyFile item)
{ return item.FileName == fileName; });
到目前为止看起来不错,除了我想做的就是返回MyFile,它不仅与文件名匹配,而且在字段pos中具有最高的值。
因此,如果列表中存在以下各项:
myDocument.doc|1
myDocument.doc|2
myDocument.doc|3
myPDF.pdf|1
myPDF.pdf|2
myPDF.pdf|3
并且在我的find方法中使用fileName =“ myDocument.doc”的值,那么我仍然缺少返回myDocument.doc | 3此项目的逻辑,因为该项目的pos值最高。
在SQL中,我的查询是
select top 1 * from MyFiles
where fileName = 'myDocument.doc'
order by position desc;
提前致谢。
可以使用Linq吗? 如果是这样,则应执行以下简单查询:
MyFile file = MyFiles.Where(f => f.FileName == fileName).OrderByDescending(f => f.Position).FirstOrDefault();
如果您使用的是.Net 2.0以上版本,则使用LINQ或扩展方法很容易:
MyFile tmpFile = MyFiles.Where(file => file.FileName == "myDocument.doc").OrderByDescending(file => file.Position).FirstOrDefault();
尝试这个:
public class MyFileList: List<MyFile>
{
public MyFile this[string filName]
{
get
{
int maxPos = int.MinValue;
MyFile retFile = null;
foreach(MyFile fil in this)
if (fil.FileName == filName &&
fil.Position > maxPos)
{
maxPos = fil.Position;
retFile= fil;
}
return retFile;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.