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()既に呼び出していることを考えると、呼び出しは無意味です(ただし、代わりに- を使用できますが、とにかく 2 つの別個のクエリは必要ありません。私は次を使用します:ToListAsEnumerable() 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 に答える