2013-05-14 105 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)