【问题标题】:How to return ICollection<object> from linq, when using select new object() {}使用 select new object() {} 时如何从 linq 返回 ICollection<object>
【发布时间】:2013-12-30 00:04:24
【问题描述】:

我目前正在使用以下 linq,但我真正想要的是返回 ICollection&lt;SexyPeopleVM&gt; 而不是列表。但是我无法理解语法,并且我尝试过的其他替代方法在运行时失败了。

这可能吗?我怎样才能做到这一点?

var o = from s in sexyPeople
                    select new SexyPeopleVM()
                    {
                        id = s.ID,
                        title = s.Title,
                        views = s.Views,
                        url = s.GetFullyQualifiedURL(),
                        friendlyDate = s.DateCreated.AsShortFriendly()
                    };
            List<SexyPeopleVM> list = o.ToList();
            return list;

【问题讨论】:

    标签: c# asp.net-mvc linq


    【解决方案1】:

    List&lt;T&gt; 实现 ICollection&lt;T&gt;
    你不需要做任何事情。

    【讨论】:

    • 是的。只需指定 ICollection&lt;SexyPeopleVM&gt; 作为函数的返回类型。
    【解决方案2】:

    正如 SLaks 所说,他在发帖时击败了我,但我想补充一点,你也可以让你的代码更简洁:

    return (from s in sexyPeople
                        select new SexyPeopleVM()
                        {
                            id = s.ID,
                            title = s.Title,
                            views = s.Views,
                            url = s.GetFullyQualifiedURL(),
                            friendlyDate = s.DateCreated.AsShortFriendly()
                        }).ToList();
    

    另外一件事,如果您没有,请获取Resharper

    我现在用

    var list = new List<object>();
    

    代替:

    List<object> list = new List<object>();
    

    A good post as to why to use var.

    这只是一种编码风格,购买 Resharper 可以很好地清理你的代码。

    感谢 Resharper,我养成了这个习惯和许多其他更清洁的习惯,比如上面的两个。我现在不能没有它。

    【讨论】:

    • 或者,sexyPeople.Select(s =&gt; new SexyPeopleVM(){...}).ToList()
    • 是的,这似乎让刚接触 C# 的人感到困惑,所以除非必须,否则我不会使用它。
    • 您的代码无法编译。您为简化它所做的更改无效。
    【解决方案3】:

    如果你真的特别想要 ICollection,就这样做

     return o.ToList() as ICollection<SexyPeopleVM>;
    

    【讨论】:

      猜你喜欢
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 2014-12-19
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 2015-01-24
      相关资源
      最近更新 更多