繁体   English   中英

C#如何在列表集合中查找值

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM