2011-03-03 123 views
1

我想知道是否可以從linq表達式/查詢運算符中添加/刪除where子句。我們可以從linq表達式中刪除子句嗎?

如: -

var qry = from e in emp where(e => e.salary > 5000) select e; 

是否可以刪除其中的表達在後面的階段?

感謝提前:)

+0

據我所知,這是不可能的。 – zneak 2011-03-03 03:39:22

+1

你的意思只是:'從e在emp選擇e'? – Equiso 2011-03-03 03:40:02

+0

@Equiso: - 是的。 – TCM 2011-03-03 03:48:00

回答

3

是的,這是可能的,但你需要實現ExpressionVisitor類評價複合表達,並根據需要進行更改。除非你正在做相對複雜的事情,否則可能有更好的方法來實現你想要的。

+0

你是唯一真正能夠理解的答案,並試圖回答這個問題。 +1 – 2011-03-03 04:39:59

0

你只能就我知道

例如,如果試圖刪除基於條件e.salary> 5000調整你的過濾,而是你應該嘗試像

var diffQry = from e in emp where(e => e.salary <= 5000) select e; 
0

我認爲WHERE子句是必需的,如果有條件查詢。否則(如果沒有條件),您可以使用:

var qry = from e in emp select e; 
0

如果要以編程方式添加和刪除where子句,可以使用查詢運算符。

var query = emp.Select(x => x); 

if (someCondition) 
    query = query.Where(x => x.Price > 50); 

您需要擴展您的問題多一點。

+1

@Psycho: - 我想刪除它添加後的位置。 – TCM 2011-03-03 03:48:40

0

qry如果是IQueryable<T> - 例如,一個LINQ到SQL或LINQ到實體查詢 - 那麼它應該是可能的分析基礎表達式樹,並建立一個新的不包括Where子句。

如果qry是一個普通的IEnumerable<T> - 例如,一個LINQ到對象的查詢 - 那麼這是無法完成的,因爲不會有表達式樹來分析。

+0

- 說如果它是IQuerable ,你能給我一些如何刪除條款的片段? – TCM 2011-03-03 03:49:45

+0

@卡爾:這不是那種可以用一小段代碼演示的東西。正如@smartcaveman所建議的,您需要使用一些嚴格的代碼才能正確執行此操作,可能需要使用'ExpressionVisitor'。 – LukeH 2011-03-03 14:30:40

相關問題