2011-11-29 46 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; 
}