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

C# Linq:如何从单一类型集合创建两种类型的集合

优化Linq实现从List<Category>到List<(string, Image)>的转换

你可以通过Linq链式调用+投影一步完成转换,无需拆分多步,代码更简洁高效:

带空值处理的安全实现

考虑到Category.Name和Category.Image可能为null(从类定义的可空修饰符能看出来),建议加入空值判断避免运行时异常:

var values = Context.Categories
    .Include(c => c.Image) // 必须保留,确保加载关联的Image数据
    .Select(c => (
        Name: c.Name ?? string.Empty, // Name为null时返回空字符串
        CategoryImage: c.Image != null 
            ? Image.FromStream(new MemoryStream(c.Image.Image)) 
            : null // Image不存在时返回null
    ))
    .ToList();

简化版(适用于业务数据保证非空场景)

如果你能确保所有Category都有Name和关联的Image,可以用null原谅运算符!简化代码:

var values = Context.Categories
    .Include(c => c.Image)
    .Select(c => (c.Name!, Image.FromStream(new MemoryStream(c.Image!.Image))))
    .ToList();

为什么这比原实现更优

  • 合并了数据查询、转换、集合生成的全流程,无需中间临时列表,减少内存开销
  • 遵循Linq函数式编程风格,代码可读性和可维护性更强
  • 内置空值处理逻辑,避免潜在的空引用异常

内容的提问来源于stack exchange,提问作者SEGMK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:30:51