0

我有以下内容:

public IList<TopicSubTopic> GetTopicSubTopics(int topicId)
{
    var topicSubTopics = _subTopicsRepository
                    .GetAll()
                    .Where(s => s.TopicId == topicId)
                    .Include(s => s.Topic)
                    .ToList();

    var topicSubTopicsSelect = from item in topicSubTopics.AsEnumerable()
        select new TopicSubTopic(
            item.TopicId,
            item.SubTopicId,
            item.Topic.Name,
            item.Name);

    return topicSubTopicsSelect;
}

和:

public partial class TopicSubTopic
{
    public TopicSubTopic(int topicId, int subTopicId, string topicName, string subTopicName)
    {
        TopicId = topicId;
        SubTopicId = subTopicId;
        TopicName = topicName;
        SubTopicName = subTopicName;
    }
    public int TopicId { get; set; }
    public int SubTopicId { get; set; }
    public string TopicName { get; set; }
    public string SubTopicName { get; set; }
}

我的 IDE 给了我以下信息:

Error   3   Cannot implicitly convert type 
'System.Collections.Generic.IEnumerable<Models.Views.TopicSubTopic>' to 
'System.Collections.Generic.IList<Models.Views.TopicSubTopic>'. 
An explicit conversion exists (are you missing a cast?)
4

1 回答 1

3

在这种情况下,您不能 - 查询返回的对象不会IList<T>因此强制转换会失败。

最简单的解决方法就是调用Enumerable.ToList,它将从中创建一个List<T>

return topicSubTopicsSelect.ToList();

AsEnumerable()顺便说一句,鉴于您已经在上一个查询中调用过,您的调用毫无意义ToList(尽管您可以使用AsEnumerable() 而不是-ToList()并且您不需要两个单独的查询。我会使用:

return _subTopicsRepository
                .GetAll()
                .Where(s => s.TopicId == topicId)
                .Include(s => s.Topic)
                .AsEnumerable()
                .Select(item => new TopicSubTopic(item.TopicId,
                                                  item.SubTopicId,
                                                  item.Topic.Name,
                                                  item.Name))
                .ToList();
于 2013-07-27T14:10:48.353 回答