簡體   English   中英

實體框架,LINQ StartsWith()對集合不起作用?

[英]Entity FrameWork, LINQ StartsWith() not working on Collection?

我在將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 =“對象引用未設置為對象的實例。”

我試圖找出在這種情況下這意味着什么,但是我似乎無法解決。 為什么會這樣呢?

問題是您的某些Staff_Name_First屬性為空。 當您對實體執行p.Staff_Name_First.StartsWith時,EF會忽略空引用,因為它們已轉換為SQL。

但是,當使用ObservableCollection<StaffData> MyCollection將其轉換為內存中的集合時, p.Staff_Name_First.StartsWith會引發異常。

查詢MyCollection時檢查null:

var result = MyCollection.Where(p => 
                       p.Staff_Name_First != null && 
                       p.Staff_Name_First.StartsWith(myString) &&
                       p.Is_Alive); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM