C# 从列表创建可观察集合时,对象引用未设置为对象的实例

C# 从列表创建可观察集合时,对象引用未设置为对象的实例,c#,sql,linq-to-sql,observablecollection,unit-of-work,C#,Sql,Linq To Sql,Observablecollection,Unit Of Work,在我的应用程序中,我从列表创建可观察的集合。 列表是我的数据库表的集合。 列表显示正确的结果,但当我创建可观察集合时,它会给我异常 对象引用未设置为对象的实例。 当我使用大型数据库运行应用程序时,有时会发生这种情况。对于小型数据库,它工作得很好 代码: var list = db.Contacts.ToList(); ObservableCollection collection = new ObservableCollection(list); 例外情况: 对象引用未设置为对象的实例 堆栈跟

在我的应用程序中,我从列表创建可观察的集合。 列表是我的数据库表的集合。 列表显示正确的结果,但当我创建可观察集合时,它会给我异常
对象引用未设置为对象的实例
。 当我使用大型数据库运行应用程序时,有时会发生这种情况。对于小型数据库,它工作得很好

代码:

var list = db.Contacts.ToList();
ObservableCollection collection = new ObservableCollection(list);
例外情况:

对象引用未设置为对象的实例

堆栈跟踪

 at System.Data.Linq.IdentityManager.StandardIdentityManager.InsertLookup(MetaType type, Object instance)
   at System.Data.Linq.CommonDataServices.InsertLookupCachedObject(MetaType type, Object instance)
   at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReaderBase`1.InsertLookup(Int32 iMetaType, Object instance)
   at Read_Contact(ObjectMaterializer`1 )
   at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext()
   at System.Collections.ObjectModel.ObservableCollection`1.CopyFrom(IEnumerable`1 collection)
   at System.Collections.ObjectModel.ObservableCollection`1..ctor(IEnumerable`1 collection)
{System.Object InsertLookup(System.Data.Linq.Mapping.MetaType, System.Object)}
我做错了什么? 先发制人


编辑:

var list = db.Contacts.ToList();
ObservableCollection collection = new ObservableCollection(list);
以上只是我代码的一小部分。在我的实际代码中,我使用UnitOfWork和Repository模式。为了调试这个问题,我尝试通过
foreach
循环打印实体的所有ID

  foreach (var item in _uow.Contacts.Query(q => !q.ContactID.Equals(1)))
  {
     i = item.ContactID;
  }

但是在大约25534(每次我得到的都是随机数字)之后,
\u uow.Contacts.Query(q=>!q.ContactID.Equals(1)
突然无法获得下一个元素。换句话说,Enumerator.MoveNext()未执行。当然,这可能是因为下一个元素为
null
,但它不是。我已经添加了一个表来确认它。

在此代码中,
db
Tables
null

var list = db.Tables.ToList();
确保在执行以下操作之前检查:

if (db != null && ds.Tables != null)
{
var list = db.Tables.ToList();
}

我想这可能是因为列表中没有数据,所以在对列表进行observableCollection(即它是否为空)之前进行检查。只是猜测。使用数据库中的所有值用正确的数据填充列表。如果您在这方面遇到问题,那么您可以做一个解决方法,即使用get set将此lst设置为属性;并在t上实现Inotifypropertychanged他的lst,现在您将此lst绑定到任何ID控件。我之所以告诉您,是因为我不知道您是否可以将列表转换为observablecollection directlty。正如您所说,我试图检查我的列表是否正确,但实际上列表抛出异常。Tolist()是您的方法,或者编写得不好?我认为应该是Tolist()。