You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#方法外部访问并复用var类型的LINQ查询结果集合

解决方案

1. 创建命名实体类代替匿名类型

匿名类型仅能在方法内部访问,无法公开复用,因此需要先定义一个包含所有所需字段的实体类:

public class SpelerClubViewModel
{
    public int Id { get; set; }
    public string Voornaam { get; set; }
    public string Achternaam { get; set; }
    public decimal Handicap { get; set; } // 类型可根据实际数据调整
    public string Telefoon { get; set; }
    public string Email { get; set; }
    public string Homeclub { get; set; }
    public int ClubId { get; set; }
    public int TeamId { get; set; }
    public int PuntenVoor { get; set; }
    public int PuntenTegen { get; set; }
}

2. 定义公开可访问的集合

在你的窗口/ViewModel类中添加一个公开的集合属性,用于持久存储查询结果:

// 公开集合,类内外均可访问
public ObservableCollection<SpelerClubViewModel> PublicSpelers { get; set; }

// 在类的构造函数中初始化集合
public YourClassName() // 替换为你的实际类名
{
    InitializeComponent(); // WPF窗口需保留此句
    PublicSpelers = new ObservableCollection<SpelerClubViewModel>();
}

3. 修改JoinData方法,绑定公开集合

将原匿名类型替换为刚创建的SpelerClubViewModel,并将查询结果存入公开集合:

public void JoinData()
{
    var spelersList = (from spel in speler
                       join club in golfclub
                       on spel.ClubId equals club.Id
                       select new SpelerClubViewModel
                       {
                           Id = spel.Id,
                           Voornaam = spel.Voornaam,
                           Achternaam = spel.Achternaam,
                           Handicap = spel.Handicap,
                           Telefoon = spel.Telefoon,
                           Email = spel.Email,
                           Homeclub = club.Naam,
                           ClubId = spel.ClubId,
                           TeamId = spel.TeamId,
                           PuntenVoor = spel.PuntenVoor,
                           PuntenTegen = spel.PuntenTegen
                       }).ToList();

    // 清空旧数据并添加新结果
    PublicSpelers.Clear();
    foreach (var item in spelersList)
    {
        PublicSpelers.Add(item);
    }

    // 首次绑定DataGrid,后续集合变化会自动通知UI更新
    if (Datagrid.ItemsSource == null)
    {
        Datagrid.ItemsSource = PublicSpelers;
    }
}

4. 复用与清空集合

  • 清空集合:直接调用PublicSpelers.Clear(),UI会自动同步更新(ObservableCollection自带通知机制)。
  • 复用结果:PublicSpelers是公开属性,在类内任意方法或类外(类实例可访问时)都能直接使用,示例:
    // 外部遍历集合示例
    foreach (var speler in PublicSpelers)
    {
        // 处理单个球员数据
    }
    

内容的提问来源于stack exchange,提问作者Rob0t

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:01:06