2017-03-16 35 views
1

我使用实体框架从数据库C#实体框架.ToList(),但CA1002:使用收集

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

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

更新: 做当

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

它说像

类型列表<Entry>不能转换为收藏<Entry>

+0

收集项= dbContext.entries.ToList(); https://msdn.microsoft.com/library/ms182142.aspx – anmarti

回答

2

有问题的codeanalysis点不抱怨你在该方法中使用的ToList(),而是你从你的方法返回一个List<T>

如果你改变你的签名(例如),那么它会很高兴:

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

好的,返回ICollection解决了这个问题。现在我不能使用find()方法,而是必须使用我认为的Linq-Query。 – L3n95

+0

是的。这取决于你想如何在别处使用这个。 Linq将处理集合,而Find仅适用于List对象。有时候忽略代码分析建议是有意义的,这取决于你的特定用例 –

+0

@ L3n95 - 可能值得看看https://stackoverflow.com/questions/271710/collectiont-versus-listt-what-should-you -use-上的接口 –

2

不是无用的。它的含义是,不是使用泛型列表,而是使用其中一个泛型集合来存储结果。 我看到您使用的是EF,所以很可能您的dbContext.Entries是am IQueryable,并且当您使用ToList()时,它实现了可查询并给出结果。

所以,打压你可以使用类似的错误:

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

或相反在以类似的方式

+0

好的,返回ICollection解决了这个问题。现在我不能使用find()方法,而是必须使用我认为的Linq-Query。 – L3n95

1

也许写一个扩展方法的结果转换为收藏? 没有测试代码,但这样的事情:

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