如何解决以下错误:无法转换为&#39; int&#39; to&#39; System.Collections.Generic.IEnumerable <int>?</int>

时间:2014-06-17 15:42:59

标签: c# linq asp.net-mvc-4 linq-to-objects

我正在尝试使用jstree和im使用mvc项目来填充树。

到目前为止它运作良好,但现在我决定将一个属性从字符串变为int。

我之所以这样做是因为我正在更改的属性是一个ID属性,我希望从我拥有的列表中获取最高的id并将其增加为1。

代码:

List<TreeNode> Nodes = getTreenodeList();
var NewId = Nodes.Select(x => x.Id.Max()) +1;

上面的代码给出了以下错误: &#34;无法转换为&#39; int&#39;到&#39; System.Collections.Generic.IEnumerable&#34;

getTreenodeList:

 public static List<TreeNode> getTreenodeList()
        {
            var treeNodes = new List<TreeNode>
            {
                new TreeNode
                {
                    Id = 1,
                    Text = "Root"
                },
                new TreeNode
                {
                    Id = 2,
                    Parent = "Root",
                    Text = "Child1"
                }
                ,
                new TreeNode
                {
                    Id = 3,
                    Parent = "Root",
                    Text = "Child2"
                }
                ,
                new TreeNode
                {
                    Id = 4,
                    Parent = "Root",
                    Text = "Child3"
                }
            };
            // call db and get all nodes. 
            return treeNodes;
        }

最后是treeNode类:

  public class TreeNode
    {
        [JsonProperty(PropertyName = "id")]
        public int Id { get; set; }
        [JsonProperty(PropertyName = "parent")]
        public string Parent { get; set; }
        [JsonProperty(PropertyName = "text")]
        public string Text { get; set; }
        [JsonProperty(PropertyName = "icon")]
        public string Icon { get; set; }
        [JsonProperty(PropertyName = "state")]
        public TreeNodeState State { get; set; }
        [JsonProperty(PropertyName = "li_attr")]
        public string LiAttr { get; set; }
        [JsonProperty(PropertyName = "a_attr")]
        public string AAttr { get; set; }
    }

到目前为止,我的googeling结果通过使用firstorDeafut给了我一些尝试,我发现应该将theienumrable转换为int但遗憾的是没有用。我尝试了其他几种情况,但没有一种情况有所帮助。

我可以诚实地说,我真的不明白这里的问题是什么,所以如果有人在那里有答案,我会深深体会到这一点。

谢谢!

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

此声明(如果有效)

Nodes.Select(x => x.Id.Max())

会返回IEnumerable<int>而不是Int。替换为:

Nodes.Select(x => x.Id).Max()

此外,您的字段Id将只保留一个Value,因此对其应用Max将是错误的。

您的代码应为:

var NewId = Nodes.Select(x => x.Id).Max() + 1;