2011-11-29 45 views
2
public User getByField(string field, string stringToFilter) 
{ 
    string fieldToReturn; 
    switch (field) 
    { 
     case "id": 
      fieldToReturn = "u.pk_user_id"; 
      break; 
     case "username": 
      fieldToReturn = "u.user_username"; 
      break; 
    } 

    var result = (from u in dc.Users 
        where fieldToReturn == stringToFilter 
        select fieldToReturn).Single(); 
    return result; 
} 

我想創建一個getter爲所有我的領域使用開關的情況下,因爲否則我將不得不創造大量的setters(有更多的情況比顯示在這裏)。但是當我嘗試返回結果時,它說它是一個字符串,而不是一個用戶。我想這是因爲我在LINQ查詢中使用了一個字符串,但我試過解決它,但不知道該怎麼做。帶開關盒的吸氣功能?

+1

'select u'instead of'fieldToReturn'? – Kolja

+0

請發佈用戶代碼 – Maess

回答

2

用參數User創建一個Func並返回一個布爾值。然後你根據你需要使用哪個字段來創建這個Func。當你調用where時,通過這個Func創建。

public User getByField(string field, string stringToFilter) 
{ 
    Func<User, bool> wherePred = null; 
    switch (field) 
    { 
     case "id": 
      wherePred = u => u.pk_user_id == stringToFilter; 
      break; 
     case "username": 
      wherePred = u => u.user_username == stringToFilter; 
      break; 
    } 

    var result = dc.Users.Where(wherePred).Single(); 
    return result; 
}