我是C#的初学者,对通用类型的正确理解有些麻烦。在此示例中,我想以某种方式将查询结果存储到变量中。
我在下面显示的代码不正确,因为应该指定通用类型T。
public class Data
{
public IQueryable<T> Results { get; set; }
public Data()
{
var db = new Database();
}
public void Store()
{
Results = db.Products.Select(x => new { x.ProductName, x.Cost });
}
}
是否可以在不声明仅用于一种用途的特殊类的情况下做到这一点?
public class ProductView
{
public string ProductName { get; set; }
public int Country { get; set; }
}
...
public IQueryable<ProductView > Results { get; set; }
另外,为什么动态类型在此示例中不适合?
public dynamic Results { get; set; }
最佳答案
有3种方法可以解决此问题:
1)创建您提到的类似ProductView
的类-经典C#6或更旧的方式
2)使用dynamic
代替T
,例如:public IQueryable<dynamic> Results { get; set; }
-不建议使用,因为它增加了运行时错误的风险并降低了可读性
3)使用tuples(C#7功能):
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));
}
关于c# - 将查询结果存储到变量中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57645268/