C# 将查询结果存储到变量中

C# 将查询结果存储到变量中,c#,variable-types,dynamictype,C#,Variable Types,Dynamictype,我是C语言的初学者,在正确理解泛型类型方面有一些困难。在本例中,我希望以某种方式将查询结果存储到变量中 下面显示的代码不正确,因为应该指定泛型类型T 公共类数据 { 公共IQueryable结果{get;set;} 公共数据 { var db=新数据库; } 公共仓库 { 结果=db.Products.Selectx=>new{x.ProductName,x.Cost}; } } 有没有可能不声明一个只用于一次使用的特殊类,比如这个 public class ProductView {

我是C语言的初学者,在正确理解泛型类型方面有一些困难。在本例中,我希望以某种方式将查询结果存储到变量中

下面显示的代码不正确,因为应该指定泛型类型T

公共类数据 { 公共IQueryable结果{get;set;} 公共数据 { var db=新数据库; } 公共仓库 { 结果=db.Products.Selectx=>new{x.ProductName,x.Cost}; } } 有没有可能不声明一个只用于一次使用的特殊类,比如这个

public class ProductView 
{
   public string ProductName { get; set; }
   public int Country { get; set; }
}
...
public IQueryable<ProductView > Results { get; set; }

解决此问题的方法有三种:

我创建像您提到的ProductView这样的类-经典C6或更老的方法

2使用动态而不是T,如:public IQueryable Results{get;set;}-不推荐使用,因为它会增加运行时错误的风险并降低可读性

3使用C7功能:

public IQueryable<(string, int)> Results { get; set; } // I suppose ProductName is string and Cost is int

public void Store()
{
    Results = db.Products.Select(x => (x.ProductName, x.Cost));
}

解决此问题的方法有三种:

我创建像您提到的ProductView这样的类-经典C6或更老的方法

2使用动态而不是T,如:public IQueryable Results{get;set;}-不推荐使用,因为它会增加运行时错误的风险并降低可读性

3使用C7功能:

public IQueryable<(string, int)> Results { get; set; } // I suppose ProductName is string and Cost is int

public void Store()
{
    Results = db.Products.Select(x => (x.ProductName, x.Cost));
}

这里的问题是,您的数据类似乎知道关于T的一些特定内容。在Store方法中,它读取产品并从每个项中获得两个特定属性。所以它实际上不是一个可以存储任何类型的泛型类。非常具体


要使其通用,您需要删除Store方法。然后剩下的就不多了。您需要确定数据的用途。它需要解决什么问题?

这里的问题是,您的数据类似乎知道关于T的一些特定内容。在Store方法中,它读取产品并从每个项目中获取两个特定属性。所以它实际上不是一个可以存储任何类型的泛型类。非常具体

要使其通用,您需要删除Store方法。然后剩下的就不多了。您需要确定数据的用途。有什么问题需要解决