2013-02-28 111 views
2

我希望能夠按照下面的方式進行操作,其中根據變量名稱選擇字段。下面的不起作用,我不能找到一個解決方案,沒有做一個大的switch語句。Linq c#基於變量的查詢

var guidId = new Guid(""); 
var fieldName= "somefield"; 

var query = 
from c in Financials 
where c.GuidId == guidId 
select **fieldName**; 

他們是一個簡單的方法來做到這一點?

感謝奧斯汀

+0

難道你不能只是做「select myVariable」 – 2013-02-28 16:30:43

+4

所以'** fieldName **'實際上是一個字符串,它是屬性的名稱?動態LINQ [> here <](http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx) – 2013-02-28 16:30:57

+0

可以解釋更多關於術語*簡單*? – 2013-02-28 16:30:58

回答

2

嘗試了這一點:

select c.GetType().GetProperty(fieldName).GetValue(c, null) 

我發現這對this SO question。如果我的答案在查詢中因爲某種原因無法正常工作,您可以只需select c,然後按照SO問題的答案中所示的方法進行處理。

注意:它返回一個object,所以要小心!

+0

經過了一些跟蹤和錯誤,我設法讓鏈接上的功能工作。你知道這是否會對性能產生很大影響,因爲我聽說反射不好? – Austin 2013-03-01 08:50:04

0

您可以使用反射:

select c.GetType().GetProperty(fieldName).GetValue(c, null); 

它真的通過名字來獲得一個屬性的值的唯一途徑。