简体   繁体   中英

cast IEnumerable<T> To Dictionary<int,T>

I have a method with this return type :

IEnumerable<T>

I want to map this Method and fill in a Dictionary.
Expected result is: Dictionary<int, T>

Dictionary<int, LeaveTypeDto> leaveType = new Dictionary<int, LeaveTypeDto>();
LeaveType.GetList(string.Empty).ToDictionary<int, LeaveTypeDto>();

How can I do this?

Note: GetList return type is IEnumerable of LeaveType, and some fields bust be map in LeaveTypeDto and some fields in LeaveType:

"ID,Title,HourlyAvailable,..."

ID is unique and must be use as key in my dictionary, and other field must be map to LeaveTypeDto.

You can specify the key, or the key and value, to take from an enumerable.

If I have a class like so:

public class MyClass
{
    public int Id {get;set;}
    public string Name {get;set;}
}

I can write the following to get a Dictionary<int, MyClass> :

IEnumerable<MyClass> values;
IDictionary<int, MyClass> valueDict = values.ToDictionary(t => t.Id);

or the following to get a Dictionary<int, string> :

IEnumerable<MyClass> values;
IDictionary<int, string> valueDict = values.ToDictionary(t => t.Id, t => t.Name);

I Defined an Extention Method On LeaveType :

public static DTO.LeaveTypeDto ToDto(this DataModel.Timekeeper.LeaveType leaveType)
        {
            return new DTO.LeaveTypeDto
            {
                ID = leaveType.ID,
                Code = leaveType.Code,
                Title = leaveType.Title,
                DailyAvailable = leaveType.DailyAvailable,
                HourlyAvailable = leaveType.HourlyAvailable,
                ShiftBaseAvailable = leaveType.ShiftBaseAvailable,
                PredefinedRemaining = leaveType.PredefinedRemaining,
                Active = leaveType.Active,
                StandardLeaveType = leaveType.StandardLeaveType,
                NotRequestAutomaticaly = leaveType.NotRequestAutomaticaly,
                TemplateFileID = leaveType.TemplateFileID,
                ObligateChooseSubstituteForDailyLeave = leaveType.ObligateChooseSubstituteForDailyLeave,
                ObligateChooseSubstituteForHourlyLeave = leaveType.ObligateChooseSubstituteForHourlyLeave,
                ObligateChooseSubstituteForShiftBaseLeave = leaveType.ObligateChooseSubstituteForShiftBaseLeave,
                ObligateChooseInsertAttachment = leaveType.ObligateChooseInsertAttachment,
                CheckSubstituteLimit = leaveType.CheckSubstituteLimit,
                AbsenceRespiteYearXferLimitDays = leaveType.AbsenceRespiteYearXferLimitDays,
                AbsenceRespiteYearXferMode = leaveType.AbsenceRespiteYearXferMode,
                AbsenceRespiteYearXferValuesSummarize = leaveType.AbsenceRespiteYearXferValuesSummarize,
                DailyRequestRegisterRespite = leaveType.DailyRequestRegisterRespite,
                DayMaxHourlyMinutes = leaveType.DayMaxHourlyMinutes,
                DayWorkMinutes = leaveType.WorkingPeriodMaxHourlyMinutes,
                DecreaseAllOnNXOverflow = leaveType.DecreaseAllOnNXOverflow,
                DecreaseBasedOnMonthWorkingDays = leaveType.DecreaseBasedOnMonthWorkingDays,
                DecreaseDayWorkMinutesOnExtraWorkDays = leaveType.DecreaseDayWorkMinutesOnExtraWorkDays,
                DecreaseOnExtraWorkDays = leaveType.DecreaseOnExtraWorkDays,
                DecreaseOnHolidays = leaveType.DecreaseOnHolidays,
                HourlyInOFFDayAvailable=leaveType.HourlyInOFFDayAvailable,
                YearXferValuesSummarize = leaveType.YearXferValuesSummarize,
                YearXferPercentage=leaveType.YearXferPercentage,
                MaxContinuousDaysLimit = leaveType.MaxContinuousDaysLimit,
                HourlyRequestRegisterRespite = leaveType.HourlyRequestRegisterRespite,
                YearXferMode = leaveType.YearXferMode,
                MonthlyDaysLimit = leaveType.MonthlyDaysLimit,
                MonthlyXMinsLimit = leaveType.MonthlyXMinsLimit,
                YearXferLimitDays = leaveType.YearXferLimitDays,
                YearLimitDays = leaveType.YearLimitDays,
                MonthStorable = leaveType.MonthStorable,
                YearHourlyMinsLimit = leaveType.YearHourlyMinsLimit,
                MonthPreusable = leaveType.MonthPreusable,
                MonthlyNXMinsLimit = leaveType.MonthlyNXMinsLimit,
                MonthMaxHourlyMinutes = leaveType.MonthMaxHourlyMinutes,
                IncreaseAbsenceRespiteRemaining = leaveType.IncreaseAbsenceRespiteRemaining,
                DailyLeaveRequestCountPerMonthForOthers = leaveType.DailyLeaveRequestCountPerMonthForOthers,
                DailyLeaveRequestDurationPerMonthForOthers = leaveType.DailyLeaveRequestDurationPerMonthForOthers,
                ShiftLeaveRequestCountPerMonthForOthers = leaveType.ShiftLeaveRequestCountPerMonthForOthers,
                ShiftLeaveRequestDurationPerMonthForOthers = leaveType.ShiftLeaveRequestDurationPerMonthForOthers,
                HourlyLeaveRequestCountPerMonthForOthers = leaveType.HourlyLeaveRequestCountPerMonthForOthers,
                UseLeaveRequetLimitForOthersPerMonth = leaveType.UseLeaveRequetLimitForOthersPerMonth,
                DailyCountPerMonth = leaveType.DailyCountPerMonth,
                CheckMeritRemainingInUnpayedRequest = leaveType.CheckMeritRemainingInUnpayedRequest,
                DayMinHourlyMinutes = leaveType.DayMinHourlyMinutes,
                FirstPresenceRangeHourlyCountPerMonth = leaveType.FirstPresenceRangeHourlyCountPerMonth,
                FirstPresenceRangeLenght = leaveType.FirstPresenceRangeLenght,
                FirstPresenceRangeMaxHourlyLimit = leaveType.FirstPresenceRangeMaxHourlyLimit,
                FirstPresenceRangeMinHourlyLimit= leaveType.FirstPresenceRangeMinHourlyLimit,
                HourlyCountPerMonth = leaveType.HourlyCountPerMonth,
                HourlyLeaveRequestDurationPerMonthForOthers = leaveType.HourlyLeaveRequestDurationPerMonthForOthers,
                IsMonthMaxHourlyStorableToCurrent = leaveType.IsMonthMaxHourlyStorableToCurrent,
                LastPresenceRangeHourlyCountPerMonth = leaveType.LastPresenceRangeHourlyCountPerMonth,
                LastPresenceRangeLenght = leaveType.LastPresenceRangeLenght,
                LastPresenceRangeMaxHourlyLimit = leaveType.LastPresenceRangeMaxHourlyLimit,
                LastPresenceRangeMinHourlyLimit = leaveType.LastPresenceRangeMinHourlyLimit,
                MiddlePresenceRangeHourlyCountPerMonth = leaveType.MiddlePresenceRangeHourlyCountPerMonth,
                MiddlePresenceRangeMaxHourlyLimit = leaveType.MiddlePresenceRangeMaxHourlyLimit,
                MiddlePresenceRangeMinHourlyLimit = leaveType.MiddlePresenceRangeMinHourlyLimit,
                MonthMaxDailyDays=leaveType.MonthMaxDailyDays,
                MonthMaxHourlyStorable=leaveType.MonthMaxHourlyStorable,
                ShiftBaseCountPerMonth=leaveType.ShiftBaseCountPerMonth,
                SuspendsPersonnelStatus=leaveType.SuspendsPersonnelStatus,
                WorkingPeriodMaxHourlyMinutes=leaveType.WorkingPeriodMaxHourlyMinutes,
                YearXMonthMaxHourlyferLimitHours=leaveType.YearXMonthMaxHourlyferLimitHours,
                YearXMonthMaxHourlyferMode=leaveType.YearXMonthMaxHourlyferMode
            };
        }

and by this Line My problem Solved.:)

GetList(string.Empty).ToDictionary(lt => lt.ID, lt => lt.ToDto())

What about System.Linq

GetList(string.Empty).ToDictionary(k => int.Parse(k.ID))

Note, the previous example is valid if ID is string , if it is int then even simpler

GetList(string.Empty).ToDictionary(k => k.ID)

If ID is part of LeaveTypeDto

var q = GetList(string.Empty).ToDictionary(b => b.ID);

else use the select overload to get index and then use ToDictionary()

var q = GetList(string.Empty).Select((element, index) => new { i= index, e = element }).ToDictionary(b => b.i, b => b.e);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM