首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将IEnumerable<T>转换为Dictionary<int,T>

将IEnumerable<T>转换为Dictionary<int,T>
EN

Stack Overflow用户
提问于 2019-01-28 06:41:17
回答 4查看 802关注 0票数 2

我有一个具有此返回类型的方法:

代码语言:javascript
运行
复制
IEnumerable<T>

我想绘制这个方法的地图,并填写一本字典。

预期结果是:Dictionary<int, T>

代码语言:javascript
运行
复制
Dictionary<int, LeaveTypeDto> leaveType = new Dictionary<int, LeaveTypeDto>();
LeaveType.GetList(string.Empty).ToDictionary<int, LeaveTypeDto>();

我该怎么做?

注意: GetList返回类型是IEnumerable of LeaveType,一些字段在LeaveTypeDto中映射,而在LeaveType中有一些字段:

代码语言:javascript
运行
复制
"ID,Title,HourlyAvailable,..."

ID是唯一的,必须在我的字典中用作键,其他字段必须映射到LeaveTypeDto。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-01-28 06:44:47

您可以指定要从可枚举项中获取的键或键和值。

如果我有这样的课:

代码语言:javascript
运行
复制
public class MyClass
{
    public int Id {get;set;}
    public string Name {get;set;}
}

我可以编写以下代码来获得一个Dictionary<int, MyClass>

代码语言:javascript
运行
复制
IEnumerable<MyClass> values;
IDictionary<int, MyClass> valueDict = values.ToDictionary(t => t.Id);

或者下面的命令来获得一个Dictionary<int, string>

代码语言:javascript
运行
复制
IEnumerable<MyClass> values;
IDictionary<int, string> valueDict = values.ToDictionary(t => t.Id, t => t.Name);
票数 1
EN

Stack Overflow用户

发布于 2019-01-28 12:47:27

我在LeaveType上定义了一个扩展方法:

代码语言:javascript
运行
复制
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
            };
        }

通过这条线,我的问题解决了。

代码语言:javascript
运行
复制
GetList(string.Empty).ToDictionary(lt => lt.ID, lt => lt.ToDto())
票数 1
EN

Stack Overflow用户

发布于 2019-01-28 06:45:07

System.Linq

代码语言:javascript
运行
复制
GetList(string.Empty).ToDictionary(k => int.Parse(k.ID))

注意,如果IDstring,如果它是int,那么前面的示例是有效的。

代码语言:javascript
运行
复制
GetList(string.Empty).ToDictionary(k => k.ID)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54396746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档