【问题标题】:List Type is wrong, not sure which list type i need [duplicate]列表类型错误,不确定我需要哪种列表类型 [重复]
【发布时间】:2013-12-19 13:17:17
【问题描述】:

只是一个简单的类,我不确定我需要返回什么列表类型,字符串不起作用,空白也不起作用,对于知道的人来说应该很简单。

感谢您的帮助

public static List<> lstVMStats()
        {
            ITAPP.Models.DBEntities db = new ITAPP.Models.DBEntities();

            var varESxis = from d in db.tblVirtualServers 
                           group d by d.ESXiID into g 
                           orderby g.Count() descending, g.Key 
                           select new {
                            ESXi = g.Key,
                            Count = g.Count() 
                           };
            return varESxis.ToList();
        }

【问题讨论】:

  • 你还没有“填写”你的列表:public static List&lt;&gt; lstVMStats() ...你必须给列表一个期望的类型。
  • 您可以创建一个Dictionary&lt;string, int&gt;

标签: c# linq function types casting


【解决方案1】:

如果您的列表包含匿名对象,您需要从您的方法中返回List&lt;object&gt;。但是它不会非常有用,因为调用它的其他方法无法访问匿名类型中定义的属性。您应该为您的结果创建一个自定义类型。

class VirtualServerInfo
{
    public string ESXi { get; set; }
    public int Count { get; set; }
}

public static List<VirtualServerInfo> lstVMStats()
{
    ITAPP.Models.DBEntities db = new ITAPP.Models.DBEntities();

    var varESxis = from d in db.tblVirtualServers 
                   group d by d.ESXiID into g 
                   orderby g.Count() descending, g.Key 
                   select new VirtualServerInfo{
                    ESXi = g.Key,
                    Count = g.Count() 
                   };
    return varESxis.ToList();
}

【讨论】:

  • 当我使用对象时,当我尝试返回列表时,我无法将匿名类型转换为对象
  • @AlexW 更新了答案。
  • 我认为这对我有用,但是我如何在剃刀中遍历结果? @foreach(ViewBag.VMStats 中的变量项){ 项 [“ESXi”];项目[“计数”]; }
  • @AlexW 这也可以,但是你失去了强类型的安全性。
  • using item["ESXi"] 给我错误“只能分配增量调用 assgin 等”我需要输入什么?
【解决方案2】:

您可以改为返回字典:

public static Dictionary<string, int> lstVMStats()
{
    ITAPP.Models.DBEntities db = new ITAPP.Models.DBEntities();

    var varESxis = from d in db.tblVirtualServers 
                   group d by d.ESXiID into g 
                   orderby g.Count() descending, g.Key 
                   select new {
                     ESXi = g.Key,
                     Count = g.Count() 
                   };
    return varESxis.ToDictionary(x=>x.Key, y=>y.Value);
}

【讨论】:

猜你喜欢
  • 2015-11-14
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
  • 2019-05-19
  • 1970-01-01
  • 2014-05-23
  • 2019-01-07
  • 2018-05-01
相关资源
最近更新 更多