使用LINQ to Entities时返回数据类型的方法

时间:2014-12-08 09:33:11

标签: c# asp.net linq

我的数据库表Staff包含NameEmailAddressDateOfBirth列。在我的Web应用程序中,我有一个单独的类ClassMyBase,有两种方法。其中一种方法使用LINQ to Entities:

public static List<Staff> ShowAll()
{
     using (ModelPersonnelContainer myContainer = new 
            ModelPersonnelContainer())
     {
         return myContainer.Staff.ToList();
     }
}

...然后在ButtonShowAll中的WebForm1事件处理程序:

protected void ButtonShowAll_Click(object sender, EventArgs e)
{
      GridViewAll.DataSource = ClassMyBase.ShowAll();
      GridViewAll.DataBind();
}

到目前为止一直很好,但是如果我向我的public static List<Staff> ShowAll()添加过滤:

public static xyz ShowAll()
{
      using (ModelPersonnelContainer myContainer = new 
                ModelPersonnelContainer())
      {
            selectedRrows=from item in myContainer.Staff
                select new
            {
              Name=item.Name,
              Email=item.Email
            }
      }
}

我的方法不起作用,因为返回数据类型与以前不同。任何简单的解决方这种返回数据类型xyz可以是什么?

如果我把所有东西放在一起(我的项目中没有单独的类)并且只有ButtonShowAll它会正常工作,所以这样:

protected void ButtonShowAll_Click(object sender, EventArgs e)
{
            using (ModelPersonnelContainer myContainer = new 
            ModelPersonnelContainer())
            {
                var selectedRows = from item in myContainer.Staff
                                  select new
                                  {
                                    Name=item.Name,
                                    Email=item.Email
                                  };
                GridView1.DataSource = selectedRows.ToList();
                GridView1.DataBind();
}

1 个答案:

答案 0 :(得分:1)

这部分代码创建了一个匿名类:

new
{
    Name=item.Name,
    Email=item.Email
}

您应该明确地命名,然后使用该类名,并且您可以键入您的返回类型:

new Staff()
{
    Name=item.Name,
    Email=item.Email
}

此外,您可能希望使用ToList(),或将返回类型更改为IEnumerable<Staff>,因为LINQ查询不会返回List<Staff>

var selectedRows = ...
                   .ToList();