我可以找到(从任何地方)将SQL查询的结果导入局部变量的最佳解决方案是使用NULL List<dynamic>
或IEnumerable<dynamic>
变量声明。
通过执行以下操作来创建变量:
@{
IEnumerable<dynamic> myVariable = null;
}
然后,变量可以从数据库查询中获取值,如:
@{
try
{
Database db = Database.Open("name"); // name of connectionString configured in web.config
string myQuery = "EXEC dbo.Get_Results @Param1=@0, @Param2=@1";
myVariable = db.Query(myQuery, @Param1, @Param2);
db.Close();
db.Dispose();
}
catch (Exception ex)
{
// Do something
}
这使我可以做以下事情:
@if(myVariable != null)
{
foreach (var row in myVariable)
{
// Do something
}
}
这是完美的,但我仍然很好奇的是如何使用List<dynamic>
来做同样的事情,作为使用IEnumerable<dynamic>
我使用它的方式的替代方法。
我在List<dynamic>
使用的IEnumerable<dynamic>
等效解决方案是什么?
我知道我的问题本身很简单,但是当我尝试创建一个可以接收结果的类时,我花了很长时间才尝试解决无法隐式转换错误从db.Query(commandText)
到预先声明的变量。所以我认为我应该提供更多细节,以防其他人试图找出相同或类似的东西。我在IEnumerable<dynamic>
无关的主题中找到了我的解决方案,这让我看到了解决我试图解决的问题的简单方法。
答案 0 :(得分:3)
Enumerable.Empty<string>()
不为空。这是一个空字符串序列。请注意,例如,以下代码打印“false”:
var sequence = Enumerable.Empty<string>();
Console.WriteLine(sequence == null);
您可能想要创建一个新的(空)列表:
List<dynamic> x = new List<dynamic>();
或者,如果您确实需要list变量来保存空引用:
List<dynamic> x = null;