在.NET中无法将类模型属性转换为列表的技术求助
解决.NET中WMBillable类属性转换为列表的问题
看你现在的代码是在构建WMBillable对象列表,应该是想把列表里对象的某个属性(比如Year、MonthNum)单独提取成一个新列表,或者在排序后的操作里遇到了属性转列表的卡点?先帮你梳理现有代码,再给出针对性的解决方案。
你的现有代码回顾
类定义
public class WMBillable { public string Month { get; set; } public int Year { get; set; } public int MonthNum { get; set; } }
列表构建与排序代码
foreach (var dt in lDistinctDate) { WMNB = new WMBillable(); DateTime Cur = new DateTime(); Cur = Convert.ToDateTime(dt.InvoiceDate); WMNB.MonthNum = Convert.ToInt32(Cur.Month); WMNB.Year = Convert.ToInt32(Cur.Year); lstWMB.Add(WMNB); } // 补全你未写完的排序逻辑:按年份降序、月份升序 var CurrentMonthYear = lstWMB.OrderByDescending(item => item.Year).ThenBy(item => item.MonthNum);
核心解决方案:将类属性转换为列表
如果你的需求是从lstWMB中提取某个属性的值生成单独列表,用LINQ的Select方法就能轻松实现,这也是.NET里处理这类场景的标准做法:
示例1:提取所有Year值为整数列表
// 从原始列表提取Year属性 List<int> yearList = lstWMB.Select(item => item.Year).ToList();
示例2:从排序后的结果提取属性列表
如果要基于排序后的CurrentMonthYear来生成属性列表,直接在排序后追加Select和ToList即可:
// 先完成排序 var sortedWMB = lstWMB.OrderByDescending(item => item.Year).ThenBy(item => item.MonthNum); // 提取排序后的MonthNum列表 List<int> sortedMonthNumList = sortedWMB.Select(item => item.MonthNum).ToList(); // 也可以生成年份+月份的组合字符串列表(比如"2024-05") List<string> yearMonthCombinedList = sortedWMB.Select(item => $"{item.Year}-{item.MonthNum:D2}").ToList();
额外代码优化建议
简化DateTime转换逻辑:你当前的日期转换代码可以简化,还可以用
TryParse避免转换失败的异常,更健壮:if (DateTime.TryParse(dt.InvoiceDate, out DateTime cur)) { WMNB.MonthNum = cur.Month; WMNB.Year = cur.Year; lstWMB.Add(WMNB); }用LINQ替代foreach构建列表:可以直接用LINQ一次性生成
lstWMB,代码更简洁易读:List<WMBillable> lstWMB = lDistinctDate .Where(dt => DateTime.TryParse(dt.InvoiceDate, out _)) // 过滤无效日期 .Select(dt => { DateTime cur = Convert.ToDateTime(dt.InvoiceDate); return new WMBillable { MonthNum = cur.Month, Year = cur.Year, Month = cur.ToString("MMMM") // 按需设置月份名称,比如"May"或"05" }; }) .ToList();
总结
不管是从原始列表还是排序后的结果中提取属性列表,Select+ToList都是最直接的解决方式。如果你的问题是其他场景(比如UI绑定的属性列表转换),可以补充更多细节,但基于现有代码,以上方案应该能解决你的核心需求。
内容的提问来源于stack exchange,提问作者Helen Anita
相关产品推荐
相关产品推荐

