我可以(在任何地方)找到的从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>中找到了解决方案.在无关的主题中,我大开眼界,可以轻松解决自己想解决的问题.
解决方法:
Enumerable.Empty< string>()不为null.它是一个空字符串序列.请注意,例如,以下代码显示“ false”:
var sequence = Enumerable.Empty<string>();
Console.WriteLine(sequence == null);
您可能要创建一个新的(空)列表:
List<dynamic> x = new List<dynamic>();
或者,如果您确实需要list变量保存空引用:
List<dynamic> x = null;