在编写Linq查询以选择特定列时,返回类型应该是什么?

时间:2014-03-06 04:33:16

标签: c# linq

我正在使用ObjectDataSourse将数据绑定到GridView。我编写了以下函数来显示网格视图上的特定列。 程序不会抛出任何错误,但它不会在网格上显示任何内容。 有什么问题?

 public IEnumerable<object> selectSpecificColumn()
 {
     IEnumerable<object> productTab = (from p in context.Products
                                       select new{ p.ProductID, p.ProductName, p.OrderDate } );
     return productTab;        
 }

3 个答案:

答案 0 :(得分:0)

我更喜欢此场景中的poco class

public class Product
{
   public Int32 ProductID {get; set;}
   public String ProductName {get; set;}
   //add more as needed
}

public List<KeyValuePair<string, string>> selectSpecificColumn()
{
     IEnumerable<Product> productTab = from p in context.Products select new Product({ProductID  =p.ProductID, ProductName = p.ProductName});
     return productTab;
}

答案 1 :(得分:0)

我建议你有三种选择。你可以选择一个。

  • 按原样使用Product类并隐藏您不想要的列。
  • 创建一个具有所需属性的新类。
  • 从中创建一个数据表并将其返回。

答案 2 :(得分:0)

绑定到已定义的类时,绑定会知道类必须绑定到哪些属性。您遇到的问题是您在LINQ代码中创建了匿名类型。然后,您将结果分配给对象列表IEnumerable<object>。现在,绑定尝试绑定到此对象列表,并且不知道对象必须绑定到哪些属性。

我知道有时我们需要将LINQ封装在一个单独的函数中,特别是如果它将从多个位置调用。但是,使用当前框架规范,该函数不能返回匿名类型。如果您不想返回整个Products类,则必须创建一个新类。