访问var列表<'a>来自方法c#的外部



我使用LINQ查询了两个表,并在var Spelers中显示了结果。这很好,但现在我想在第一次清除var后,在方法之外重用这个查询。我搜索了所有已知的资源,但找不到解决方案。

查询Spelers使用ObserverableCollections speler和golfclub。我试着为我的C#考试创建一个应用程序,我是C#新手。我希望有人能帮助我,因为我希望所有的查询都能公开。

public void JoinData()
{
var Spelers = (from spel in speler
join club in golfclub
on spel.ClubId equals club.Id
select new
{
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();
if (Datagrid.ItemsSource == null)
{
Datagrid.ItemsSource = Spelers;
}
}   


我强烈建议对如此大的各种数据集使用单独的类型。

例如:

public class MyDataCarrier
{
public int Id { get; set; }
public string Voornaam { get; set; }
public string Achternaam { get; set; }
public int 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 PuntenTege { get; set; }
}

然后只需编写方法:

public List<MyDataCarrier> GetData()
{
return (
from spel in speler
join club in golfclub
on spel.ClubId equals club.Id
select new MyDataCarrier
{
// here you assing each property
})
.ToList();
}

然后你可以很容易地在任何地方重复使用它:

if (DataGrid.ItemsSource is null)
{
DataGrid.DataSource = GetData();
}

首先,我们应该提取Speler作为属性;我们必须更改匿名类型以获得更合适的类型,让它是一个命名元组(自定义类是另一种可能性(:

//TODO: Please, check types! Is "int Handicap" a correct guess?
public List<(
int Id,
string Voornaam,
string Achternaam,
int Handicap,
string Telefoon,
string Email,
string Homeclub,
int ClubId,
int TeamId,
int PuntenVoor,
int PuntenTegen
)> Speler { get; private set; } = new (); 

然后你可以放

public void JoinData() {
Spelers = (from spel in speler
join club in golfclub
on spel.ClubId equals club.Id
select (spel.Id,
spel.Voornaam,
spel.Achternaam,
spel.Handicap,
spel.Telefoon,
spel.Email,
club.Naam,
spel.ClubId,
spel.TeamId,
spel.PuntenVoor,
spel.PuntenTegen))
.ToList();
if (Datagrid.ItemsSource == null)
Datagrid.ItemsSource = Spelers;
}

如果不希望方法有返回值,也可以在方法之外有值。

Var Spelers=new List<object>();
public void JoinData()
{
Spelers = (from spel in speler
join club in golfclub
on spel.ClubId equals club.Id
select new
{
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();
if (Datagrid.ItemsSource == null)
{
Datagrid.ItemsSource = Spelers;
}
}   

最新更新