gpt4 book ai didi

c# - 列表中的 LINQ 查询列表

转载 作者:太空宇宙 更新时间:2023-11-03 14:49:20 27 4
gpt4 key购买 nike

我有以下 EF 对象列表,Leagues,其中每个对象都有一个 Teams 列表。每个 Team 都有与之关联的年份

在 WPF 表单中,我有一个 combobox 供多年选择。当我选择一年时,我希望能够按当年存在的联赛排序,然后是它拥有的球队,这样我就可以为其填充 TreeView

到目前为止我最多的是:

    public int SelectedYear
{
get => _SelectedYear;
set
{
_SelectedYear = value;
RaisePropertyChangedEvent("SelectedYear");
Refresh();
}
}

public void Refresh(object sender = null, EventArgs e = null)
{
Leagues = new ObservableCollection<League>(_Locator.Statistix.Leagues.Where(x => x.Teams.Count(t => t.Year == SelectedYear) > 0).ToList());
foreach(League l in Leagues)
{
l.Teams.Where(x => x.Year == SelectedYear);
}
}

League对象如下:

public partial class League
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public League()
{
this.Teams = new HashSet<Team>();
}

public int ID { get; set; }
public string Name { get; set; }
public string Initials { get; set; }
public string LahmanID { get; set; }

[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Team> Teams { get; set; }
}

为了更好的衡量,这里还有 Team 对象:

public partial class Team
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Team()
{
this.Games = new HashSet<Game>();
this.Games1 = new HashSet<Game>();
}

public int ID { get; set; }
public int FranchiseID { get; set; }
public int Year { get; set; }
public Nullable<int> CityID { get; set; }
public string Nickname { get; set; }
public Nullable<int> BallparkID { get; set; }
public int LeagueID { get; set; }

public virtual City City { get; set; }
public virtual Franchise Franchise { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Game> Games { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Game> Games1 { get; set; }
public virtual League League { get; set; }
}

有没有一种方法可以过滤同一个 Leagues ObservableCollection 中球队所关注的联赛?

最佳答案

如果联盟的规模不是太大,我会考虑收集数据,然后提取不需要的数据。

public void Refresh(object sender = null, EventArgs e = null)
{
Leagues = new ObservableCollection<League>(_Locator.Statistix.Leagues.ToList());
foreach(League l in Leagues)
{
l.Teams.RemoveAll(x => x.Year == SelectedYear);
}
Leagues.RemoveAll(x => x.Teams.Count == 0);
}

另一种方法是构建 ObserableCollection 固有的专用类并实现 IObseravable 以构建专用逻辑以将类用作 WPF 表单的数据上下文,这将允许系统在选择不同年份时自动过滤.

关于c# - 列表中的 LINQ 查询列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52463261/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com