将查询结果存储到变量中

时间:2019-08-25 10:37:27

标签: c# variable-types dynamictype

我是C#的初学者,对正确理解泛型类型有些麻烦。在此示例中,我想以某种方式将查询结果存储到变量中。

我在下面显示的代码不正确,因为应该指定通用类型T。

TestCase

是否可以在不声明仅用于一种用途的特殊类的情况下做到这一点?

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

2 个答案:

答案 0 :(得分:4)

有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));
}

答案 1 :(得分:0)

这里的问题是您的Data类似乎了解有关T的一些特定知识。在Store方法中,它读取Products并从每个项目中获得两个特定的属性。因此,它实际上不是可以存储任何类型的泛型类。这很具体。

要使其通用,您需要删除Store方法。剩下的就不多了。您需要确定Data的目的是什么。它存在什么问题要解决?