我正在编写报告并在报告加载LINQ后立即加载数据。
summaryData = from summary in _entity.Summary
// some constraints here
select new
{
summary.payment_category_desc,
summary.payment_due_amt,
summary.currency_desc
};
我需要稍后在不同的事件(PrintDetail)中使用这些结果,例如我可以这样说:
string name = summaryData[currentIndex].payment_category_desc
基本上我需要的是找到如何将LINQ结果存储在我以后可以枚举的全局变量中。我已经尝试了IQueriable,它不会让我。我也试图避免创建一个包含三个成员的类,以便能够使用ToList()。
有什么想法吗?
答案 0 :(得分:2)
编辑说实话,我只是注意到您使用的是匿名类型。正如您现在所知道的那样,您无法在方法之外获得anon类型。但是,您可以使用C#4.0 Tuple<>
当您在当前方法之外传递/定义summaryData时,以下内容将起作用:
summaryData = from summary in _entity.Summary
// some constraints here
select new Tuple<string, DateTime, decimal>
{
summary.payment_category_desc,
summary.payment_due_amt,
summary.currency_desc
};
无论是什么,如果它是一个集合/查询结果,IEnumerable<T>
将起作用
请务必先考虑是否需要使用.ToList()
转换为列表(缓存结果)。
如果不这样做,原始枚举器将被多次执行,这可能是(性能)问题。考虑枚举器何时访问不再打开,可访问等的文件。
答案 1 :(得分:1)
就个人而言,我会避免使用全局变量。当您具有依赖项(如全局变量)时,您将更难以测试应用程序。
我不知道您的确切架构,但我很想将对象传递给需要它的相关方法。至少通过这种方式,您可以轻松地模拟对象并减少依赖性。
答案 2 :(得分:1)
您的IQueryable结果采用了自定义执行。如果您在“使用”块内编码,则在尝试访问结果时(无论是否为全局变量),您将没有连接。
尝试通过ToList()扩展方法从LINQ查询返回List。