实体FrameWork,LINQ StartsWith()不能处理Collection?

时间:2017-03-03 14:51:26

标签: c# entity-framework linq

我遇到LINQ问题,StartWith()应用于集合。

这是DataBase上查询的简化版本,返回正确的记录:

using (Entities entities = new Entities())
{               
     var result = entities.StaffData.Where(p => 
                       p.Staff_Name_First.StartsWith(myString)
                       p.Is_Alive == true);                
}

如上所述,这将返回正确的记录,

但是,当放置在包含标准Is_Alive == true的所有记录的集合上时。该系列约有500条记录。

public static ObservableCollection<StaffData> MyCollection = new ObservableCollection<StaffData>();

var result = MyCollection.Where(p => 
                       p.Staff_Name_First.StartsWith(myString)
                       p.Is_Alive == true); 

因此,当将查询应用于集合时,我会在结果中收到消息:

  

Message =“对象引用未设置为对象的实例。”

我试图在这种情况下找出这意味着什么,但我似乎无法解决这个问题。为什么会发生这种情况?

1 个答案:

答案 0 :(得分:4)

问题是您的某些callIdField属性为空。当您对实体执行Staff_Name_First时,EF会忽略空引用,因为它们已转换为SQL。

但是当您使用p.Staff_Name_First.StartsWith将其转换为内存中集合时,ObservableCollection<StaffData> MyCollection会抛出异常。

查询p.Staff_Name_First.StartsWith时检查空值:

MyCollection