2013-05-14 55 views
0

在下面的方法中,我試圖通過傳遞ID作爲參數傳遞ID值作爲參數可以是多個值,如在CSV(如:1,2),並返回以IEnumerable作爲調用函數。使用linq查詢實體的ID

代碼遵循如下:

[NonAction] 
public static IEnumerable<UserProfile> SearchCMSAdmins(string s) 
{ 
    //var searchResults = Entities.UserProfiles.Where(item =>item.UserName.Contains(s)); 
    //return searchResults; 

    string[] ids = s.Split(','); 

    IEnumerable<UserProfile> results = null; 
    IList<UserProfile> user = new List<UserProfile>(); 

    for (int i = 0; i < ids.Length; i++) 
    { 
     int id = Convert.ToInt32(ids[i].ToString()); 
     var entity = Entities.UserProfiles.Where(item => item.UserId); 
     //user.Add(entity); 
     results = results.Concat(entity); 
    } 

    return results; 
} 

任何幫助表示讚賞。

+0

你不應該需要ids [i] - > .ToString(); ids已經是字符串了,你的意思是Entities.UserProfiles.Where(item => item.UserId == i)? – 2013-05-14 07:49:03

回答

0

你可以得到id陣列是int類型,您可以使用int.TryParseConvert.ToInt32,如:

int[] ids = s.Split(',').Select(r=> Convert.ToInt32(r)).ToArray(); 

以後你可以將您的LINQ查詢修改爲:

IList<UserProfile> user = Entities.UserProfiles 
            .Where(item=> ids.Contains(item)).ToList(); 

這就像Select * from table where ID in (1,2,3)看到Creating IN Queries With Linq to SQL的想法

0
[NonAction] 
public static IEnumerable<UserProfile> SearchCMSAdmins(string s) 
{ 
    string[] ids = s.Split(','); 

    foreach (string idAsString in ids) 
    { 
     int id = Convert.ToInt32(idAsString); 
     var entity = Entities.UserProfiles.Where(item => item.UserId == id); 
     yield return entity; 
    } 
} 

應該這樣做(應該有一些驗證代碼過於萬一ID不是int或實體爲null)