[英]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.