2010-09-20 47 views

回答

5

排序Linq中的查詢是懶惰評估的,因此您可以在實際獲取第一個結果之前向它們添加條件,並且仍會導致使用「最佳」SQL。

例如:

// an extension method on the LINQ context: 
public static IQueryable<Story> FilteredStories(this DbContext db) 
{ 
    return from story in db.Stories where status != "X" select story; 
} 

// ...later... 
var stories = from story in db.FilteredStories() 
       where title = "Something" 
       select story; 
foreach(var story in stories) 
{ 
    // whatever... 
} 

你也可以「隱藏」的基本LINQ上下文和總是通過追加status != "X"條件的包裝類。當然,那麼問題是,那麼你不得不跳過如果你沒有想要一個過濾列表...

+0

你可能想要在擴展方法上使用公共靜態 – 2010-09-21 00:48:04

+0

@Matt:對,謝謝。 – 2010-09-21 02:17:22

0

你可能會在之後是Dynamic LINQ。這是一個幫助程序庫,可以用來從字符串中分析LINQ表達式。

+0

我不明白這是如何相關的,這是非常簡單的使用Where操作符。 – 2010-09-21 00:49:55

+0

我認爲這個問題更多的是要求如何使用LINQ where子句,錯誤地認爲:)。如果OP的客戶想要開始定義更多規則,包括以A,B或C等開頭,那麼動態LINQ將變得有用。 – sipwiz 2010-09-21 01:13:17

0

LINQ是如此容易,寫的問題實際上給你的答案!

where status != "X" 

我更傾向於將

.Where(record => record.status != "X") 

這不完全是一回事。你錯過的唯一的東西是雙引號,因爲它是一個字符串,而不是字符。

相關問題