2012-09-04 24 views
3

我能找到的(任意位置)从SQL查询获取结果到本地变量的最佳解决方案是使用NULL List<dynamic>IEnumerable<dynamic>变量声明。使用NULL局部变量在列表中使用NULL <dynamic> C#

通过执行类似创建变量:

@{ 
    try 
    { 
     Database db = Database.Open("name"); // name of connectionString configured in web.config 
     string myQuery = "EXEC dbo.Get_Results @[email protected], @[email protected]"; 
     myVariable = db.Query(myQuery, @Param1, @Param2); 
     db.Close(); 
     db.Dispose(); 
    } 
    catch (Exception ex) 
    { 
     // Do something 
    } 

,让我这样做如下:

@{ 
    IEnumerable<dynamic> myVariable = null; 
} 

的变量可以从像数据库查询得到的值

@if(myVariable != null) 
{ 
    foreach (var row in myVariable) 
    { 
     // Do something 
    } 
} 

这是完美的工作,但我仍然好奇的是如何做s使用List<dynamic>作为使用IEnumerable<dynamic>的替代方法。

什么是List<dynamic>等效解决方案,我用于IEnumerable<dynamic>

我知道我的问题本身非常简单,但我花了很长的时间让过去试图解决不能隐式转换错误,当我试图创造一种可以从db.Query(commandText)收到成果转化A级一个预先声明的变量。所以我认为我应该提供更多的细节以防止其他人试图找出相同或相似的东西。我在IEnumerable<dynamic>的无关话题中找到了我的解决方案,这让我的眼睛更加简单地解决了我试图解决的问题。

+0

不要使用String.Format()来构建像那样的sql字符串。这很糟糕**。 –

+0

@JoelCoehoorn:他实际上在不必要地使用它。 – SLaks

+0

我之前一直在尝试的'List '解决方案让我使用它。我用'IEnumerable '做的方式不需要使用String.Format。我正在修复我的代码示例。谢谢。 – cusman

回答

3

Enumerable.Empty<string>()不为空。它是一串空的字符串。注意,例如,下面的代码打印出“假”:

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

你可能想创建一个新的(空)名单:

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

,或者,如果你真的需要列表变量保留空引用:

List<dynamic> x = null; 
+0

两个'列表 x =新列表 x = null;'正在工作。此外,Enumerable.Empty ()不是“null”,100%正确。我相信'null'是我尝试的第一个值之一,但代码中的其他内容需要修复。谢谢 – cusman

+0

PS - 我可以声明'IEnumerable x = null;'这是有效的。 – cusman

相关问题