我有一個列表與每個Foo包含一個列表,Linq查詢嵌套列表
我想根據日期時間列表中的條件篩選列表中的項目。例如,我想要獲取嵌入列表中具有重複日期時間的所有Foo項目。
我已經嘗試了很多東西,但我認爲我的邏輯在我的目標實現中略有缺陷。任何幫助表示讚賞。
謝謝。
我有一個列表與每個Foo包含一個列表,Linq查詢嵌套列表
我想根據日期時間列表中的條件篩選列表中的項目。例如,我想要獲取嵌入列表中具有重複日期時間的所有Foo項目。
我已經嘗試了很多東西,但我認爲我的邏輯在我的目標實現中略有缺陷。任何幫助表示讚賞。
謝謝。
我相信你正在尋找的東西是這樣的:
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; }
}
這可能會幫助你(即使它很難搞清楚你有什麼/需要,正如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;
}
}
聲明:它根本沒有效率。使用不同的數據結構或更復雜的算法會加快速度。
通過他們的日期時間值嘗試
var duplicateDateFoos = foos.Where(foo => foo.DateTimes.GroupBy(d => d).Any(dateGroup => dateGroup.Count() > 1));
這意志,爲每個FOO,組DateTime是否名單。如果存在,對於特定的foo,存在具有多個項目的分組 - 即該foo的DateTime中的至少兩個項目具有相同的值 - 則該foo將被添加到duplicateDateFoos列表。
如果你把你已經嘗試過的代碼放到目前爲止,它會更容易幫助你。 –
Foo有一個DateTime列表嗎?或者您在「DateTime列表中」是什麼意思? –