繁体   English   中英

从方法 c# 外部访问 var list<'a>

[英]Access a var list<'a> from outside the method 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作为属性; 我们必须将匿名类型更改为更合适的类型,让它成为一个命名元组自定义 class是另一种可能性):

//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;
    }
}   

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM