C#Entity Framework .ToList()但CA1002:使用Collection

时间:2017-03-16 08:50:42

标签: c# entity-framework linq list collections

我正在使用Entity Framework从数据库中选择条目

List<Entry> entries = dbContext.entries.ToList();

Codeanalysis告诉我警告CA1002:我发现我应该使用Collection代替List。但是没有.ToCollection()方法。使用EF时这个警告是否无效或者那里的最佳做法是什么?

更新: 做的时候

Collection<Entry> entries = dbContext.entries.ToList();

它说像

  

类型列表<Entry>无法转换为集合<Entry>

3 个答案:

答案 0 :(得分:2)

没用。它的含义是,您可以使用其中一个通用集合来存储结果,而不是使用通用列表。 我发现您使用的是EF,因此我的dbContext.Entries很可能是IQueryable,当您使用ToList()时,它会实现可查询并为您提供结果。

因此,为了抑制错误,你可以使用类似的东西:

ICollection<Entry> collection = new List<Entry>();

或以类似的方式将结果转换为集合

答案 1 :(得分:2)

有问题的代码分析点并不是抱怨您在方法中使用ToList(),而是从方法中返回List<T>

如果您更改签名(例如),那么它会很高兴:

public ICollection<Entry> GetEntries()
{
    return dbSet.Entries.ToList();
}

答案 2 :(得分:1)

也许写一个扩展方法? 没有测试过这段代码,但是这样:

public static Collection<T> ToCollection<T>
        (this IEnumerable<T> source)
        {
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }
            return new Collection<T>(source);
        }