3

我能找到(在任何地方)将 SQL 查询的结果转换为局部变量的最佳解决方案是使用 NULLList<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>在不相关的主题上找到了我的解决方案,这让我看到了我试图解决的问题的更简单的解决方案。

4

1 回答 1

3

Enumerable.Empty<string>()不为空。它是一个空的字符串序列。请注意,例如,以下代码打印“false”:

var sequence = Enumerable.Empty<string>();
Console.WriteLine(sequence == null);

您可能想要创建一个新的(空)列表:

List<dynamic> x = new List<dynamic>();

或者,如果您确实需要列表变量来保存空引用:

List<dynamic> x = null;
于 2012-09-04T02:42:06.007 回答