You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在.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();

额外代码优化建议

  1. 简化DateTime转换逻辑:你当前的日期转换代码可以简化,还可以用TryParse避免转换失败的异常,更健壮:

    if (DateTime.TryParse(dt.InvoiceDate, out DateTime cur))
    {
        WMNB.MonthNum = cur.Month;
        WMNB.Year = cur.Year;
        lstWMB.Add(WMNB);
    }
    
  2. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:26:10