如何在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
相关产品推荐
相关产品推荐

