2012-10-24 22 views
1

這是我的代碼。它的工作原理如何使用linq查找非null或string.empty列?

var someField = "abc"; 

var list = Entities.Where(x=>SomeField).FirstOrDefault(); 

這是問題,someField也可以是null或string.empty。如果someField爲null或string.empty,我將選擇SomeField爲null或string.empty的所有內容。

var list = Entities.Where(x=>SomeField == null || SomeField == string.empty).FirstOrDefault(); 

現在,我有一個if else語句來檢查someField是否有值,然後決定使用哪個查詢。

我需要將2個查詢合併爲一個。因爲如果有我們需要檢查的字段,那麼這個if state else state會變得很長。

+0

在第一個代碼段中,您暗示'SomeField'的類型爲'bool'。現在它是'string'類型?你的問題很不清楚。 –

回答

3

我懷疑你其實想要匹配x.SomeField == someField,或者一切如果someField爲空或者是空的吧?

我這樣做:

var fetchAll = string.IsNullOrEmpty(someField); 
var list = Entities.FirstOrDefault(x => fetchAll || x.SomeField == someField); 

可以內聯,但我覺得上面比檢查someField是否在查詢中null或空清晰。

請注意,我已經使用了FirstOrDefault的過載,其中使用了謂詞 - 這相當於使用Where後跟FirstOrDefault,但更簡潔一點。

+0

嗯,有趣。我懷疑這是對OP意圖的更正確的解釋。 –

1

我做了一個小樣本,我剛開始在實體與SomeField空或空值...

我希望這對你的作品。

public class MyEntity 
{ 
    public int ID { get; set; } 

    public string SomeField { get; set; } 
} 

static void Main(string[] args) 
{ 
    List<MyEntity> Entities = new List<MyEntity>(); 
    for (int i = 0; i < 10; i++) 
    { 
     Entities.Add(new MyEntity() 
        { 
         ID = i, 
         SomeField = "Value " + i.ToString() 
        }); 
    } 

    Entities.Add(new MyEntity() { ID = 10, SomeField = null }); 
    var entity = Entities.Where(x => string.IsNullOrEmpty(x.SomeField)).FirstOrDefault(); 
}