将查询结果存储到变量中

Posted

技术标签:

【中文标题】将查询结果存储到变量中【英文标题】:Storing query result into a variable 【发布时间】:2019-12-29 21:34:35 【问题描述】:

我是 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; 

【问题讨论】:

【参考方案1】:

有3种方法可以解决这个问题:

1) 创建您提到的 ProductView 之类的类 - 经典 C#6 或更旧的方式

2) 使用dynamic 而不是T,例如:public IQueryable&lt;dynamic&gt; 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));

【讨论】:

【参考方案2】:

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

要使其通用,您需要删除 Store 方法。然后所剩无几。您需要确定Data 的目的是什么。存在什么问题需要解决?

【讨论】:

以上是关于将查询结果存储到变量中的主要内容,如果未能解决你的问题,请参考以下文章

LINQ to SQL 将查询结果存储在变量中

oracle存储过程:将select查询的结果存到变量中

如何将跨表查询的结果存储到表变量中

如何将数据库查询结果中的值存储到机器人框架中的变量中[重复]

我可以将一个字段的查询结果存储到不同的变量中吗?如果没有,那我该怎么办?

C#/Sqlite 将查询结果存储为变量的简单方法