循环遍历方法返回的列表中的每个用户

时间:2016-02-15 02:18:51

标签: c# list loops for-loop foreach

我的代码目前正常运行,但我想这样做,以便它不会多次调用数据库,但如果在User IDs中输入了很多request,则代价会很高。所以,我首先将list users连接到以逗号分隔的字符串中,我的DataAccess图层方法允许这样,以便它可以返回list users } startend时间。

我的数据如下:

UserId     Time     EventType
Test1   xx-xx-xxxx   Start
Test1   xx-xx-xxxx   End
Test1   xx-xx-xxxx   Start
Test1   xx-xx-xxxx   End
Test2   xx-xx-xxxx   Start
Test2   xx-xx-xxxx   End

我的问题是......我可以在foreach循环之外移动DataAccess Layer调用,但是如何通过我的函数从返回的list循环每个用户?目前,我正在为每个user单独拨打电话。

我的代码:

var userList = string.Join(",", Array.ConvertAll(request.Users, x => x.ToString()));
response.UserRecordList = new List<UserRecord>();

foreach (String userId in request.Users) // request.Users is a Array of UserId's 
{
    List<UserModel> result = // I am making my DataAccess Layer call here.
    UserRecord record = new UserRecord();
    record.UserId = userId;
    record.TimePeriodList = new List<TimePeriod>();
    for (int i = 0; i < result.Count; i += 2)
    {
        TimePeriod timeData = new TimePeriod();
        timeData.StartTime = result[i].TimeDate;
        timeData.EndTime = result[i + 1].TimeDate;
        record.TimePeriodList.Add(timeData);
        }
        response.UserRecordList.Add(record);
}

更新

response.UserRecordList = new List<UserRecord>();
var userList = string.Join(",", Array.ConvertAll(request.Users, x => x.ToString()));
List<UserModel> result = // EDIT - I am making my DataAccess Layer call here.

foreach (var resultList in result) // EDIT - iterate through the returned list
{
    UserRecord record = new UserRecord();
    record.UserId = userId;
    record.TimePeriodList = new List<TimePeriod>();
    for (int i = 0; i < result.Count; i += 2)
    {
        TimePeriod timeData = new TimePeriod();
        timeData.StartTime = result[i].TimeDate;
        timeData.EndTime = result[i + 1].TimeDate;
        record.TimePeriodList.Add(timeData);
        }
        response.UserRecordList.Add(record);
}

我开始遍历my方法返回的result列表。问题是我没有按用户ID组织该列表以及它的所有开始和结束。我有它所以它有用户ID然后它的开始时间...用户ID然后它的结束时间。因此,如果我在xml中显示的数据被重复,那么用户在列表中的次数是多少次。

1 个答案:

答案 0 :(得分:1)

我不认为我确实得到了你的问题,但我认为你可以使用GroupBy来枚举每个用户的收集。像

var userList = string.Join(",", Array.ConvertAll(request.Users, x => x.ToString()));
List<UserModel> result = // move it outside foreach and pass userList to make database call.

foreach (var resultList in result.GroupBy(x => x.UserId))
{
    var perUserResults = resultList.ToList();
    UserRecord record = new UserRecord();
    record.UserId = resultList.Key; //key is the user id field since we have grouped on UserId
    record.TimePeriodList = new List<TimePeriod>();
    for (int i = 0; i < perUserResults.Count; i += 2)
    {
        TimePeriod timeData = new TimePeriod();
        timeData.StartTime = perUserResults[i].TimeDate;
        timeData.EndTime = perUserResults[i + 1].TimeDate;
        record.TimePeriodList.Add(timeData);
    }

    response.UserRecordList.Add(record);
}