0

在以下方法中,我试图通过传递 id 值来获取用户名,其中作为参数传递的 id 可以是 csv 中的多个值(例如:1,2),并作为 IEnumerable 返回给调用函数。

代码如下:

[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;
}

任何帮助表示赞赏。

4

3 回答 3

0

尝试使用Contains

var results = Entities.UserProfiles.Where(item => ids.Contains(item.UserId));

http://msdn.microsoft.com/en-us/library/ms132407.aspx

于 2013-05-14T07:32:01.533 回答
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)用 Linq to SQL 创建 IN 查询的想法

于 2013-05-14T07:33:42.227 回答
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 或实体为空,也应该有一些验证代码)

于 2013-05-14T07:51:50.817 回答