2012-05-08 237 views
0

我有一個列表與每個Foo包含一個列表,Linq查詢嵌套列表

我想根據日期時間列表中的條件篩選列表中的項目。例如,我想要獲取嵌入列表中具有重複日期時間的所有Foo項目。

我已經嘗試了很多東西,但我認爲我的邏輯在我的目標實現中略有缺陷。任何幫助表示讚賞。

謝謝。

+10

如果你把你已經嘗試過的代碼放到目前爲止,它會更容易幫助你。 –

+0

Foo有一個DateTime列表嗎?或者您在「DateTime列表中」是什麼意思? –

回答

0

我相信你正在尋找的東西是這樣的:

List<Foo> foos = new List<Foo>(); 

Random r = new Random(); 

for (int i = 0; i < 100; i++) 
{ 
    foos.Add(new Foo { Bar = DateTime.Now.Date.AddDays(r.Next(0, 365)) }); 
} 

IList<Foo> filteredFoos = foos.Where(f1 => foos.Count(f2 => f2.Bar == f1.Bar) > 1).ToList(); 

其中foo的樣子:

class Foo 
{ 
    public DateTime Bar { get; set; } 
} 
0

這可能會幫助你(即使它很難搞清楚你有什麼/需要,正如Andrew所述):

public class Foo 
{ 
    public Foo(IEnumerable<DateTime> dates) 
    { 
     this.Dates = new List<DateTime>(dates); 
    } 

    public IList<DateTime> Dates { get; private set; } 

    public static IEnumerable<Foo> FindFoos(IList<Foo> source) 
    { 
     return from f in source 
       where f.Dates.Distinct().Count() < f.Dates.Count 
       select f; 
    } 
} 

聲明:它根本沒有效率。使用不同的數據結構或更復雜的算法會加快速度。

0

通過他們的日期時間值嘗試

var duplicateDateFoos = foos.Where(foo => foo.DateTimes.GroupBy(d => d).Any(dateGroup => dateGroup.Count() > 1)); 

這意志,爲每個FOO,組DateTime是否名單。如果存在,對於特定的foo,存在具有多個項目的分組 - 即該foo的DateTime中的至少兩個項目具有相同的值 - 則該foo將被添加到duplicateDateFoos列表。