在下面的方法中,我试图通过传递id值来获取用户名,其中传递的id作为参数可以是csv中的多个值(例如:1,2),并作为IEnumerable返回到调用函数。 / p>
代码如下:
[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 :(得分:0)
尝试使用Contains
:
var results = Entities.UserProfiles.Where(item => ids.Contains(item.UserId));
答案 1 :(得分:0)
您可以将id
数组设为int
类型,您可以使用int.TryParse
或Convert.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的想法
答案 2 :(得分: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,也应该有一些验证码)