2009-12-01 55 views
0

我有一個列表這個列表包含以下類的集合C#如何找到一個列表集合值

public class MyFile 
{ 
    public string FileName 
    { 
     get; 
     set; 
    } 

    public int Position 
    { 
     get; 
     set; 
    } 
} 

所以OFC列表定義看起來就像這樣:

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 

和文件名=「myDocument.doc」在我的查找方法的價值,那麼我仍然缺少邏輯迴歸myDocument.doc | 3這個項目,因爲這是pos的最高值。

在SQL我的查詢將提前

select top 1 * from MyFiles 
where fileName = 'myDocument.doc' 
order by position desc; 

感謝。

+0

您使用.NET 3.5或更早版本嗎? – 2009-12-01 19:56:57

+0

使用3.5所以沒有問題。 – 2009-12-01 19:57:23

回答

10

你可以使用Linq嗎?如果是這樣,像這樣一個簡單的查詢應該這樣做:

MyFile file = MyFiles.Where(f => f.FileName == fileName).OrderByDescending(f => f.Position).FirstOrDefault(); 
+0

遲到了幾分鐘。 (c: – Dathan 2009-12-01 20:00:10

+1

如果Where返回一個空集合,你會想要使用FirstOrDefault,這不會拋出一個異常嗎? – scwagner 2009-12-01 20:00:23

+0

真的,它會拋出一個異常,現在用第一個或默認測試 – 2009-12-01 20:02:56

2

這是很容易使用LINQ或擴展方法,如果你使用上面的.Net 2.0:

MyFile tmpFile = MyFiles.Where(file => file.FileName == "myDocument.doc").OrderByDescending(file => file.Position).FirstOrDefault(); 
+0

+1 – 2009-12-01 20:11:27

0

試試這個:

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; 
     } 
    } 
} 
相關問題