【问题标题】:How to assign values from an object list to another list in c#如何将对象列表中的值分配给c#中的另一个列表
【发布时间】:2019-07-03 09:07:17
【问题描述】:

我有几个这些类的列表。

public class Image
{
    public int ImageID { get; set; }
    public int JobAddressID { get; set; }
    public DateTime CreatedDate { get; set; }
    public string Name { get; set; }
    public string Extension { get; set; }
    public string Type { get; set; }
    public Byte[] ImageBytes { get; set; }
    public int Imagetag { get; set; }
}

public class ImageView
{
    public int tag { get; set; }
    public byte[] ImageData { get; set; }
    public DateTime CreatedDate { get; set; }
    public string Name { get; set; }
}

我想要的是将一个列表中的值分配给另一个列表,而不需要可怕的 foreach 循环,也许是使用 linq 的东西?

我的列表是(它们已实例化并准备就绪)

 List<Image> _imageList 
 List<ImageView> ImageView

伪代码

ImageView.tag = Image.ImageID
 ImageView.ImageData = ImageBytes

我已经尝试过了,但我仍然需要另一个循环来将 blah 中的值分配给我的 Imageview。

var blah = _imageList.GroupBy(i => new { i.ImageID, i.ImageBytes }).ToArray();

【问题讨论】:

  • 使用 Automapper 来完成这项任务,可以很容易地将对象值映射到不同的对象
  • 没有 foreach 循环 为什么你不想使用循环? Linq 将在后台使用它们
  • 好的,所以_imageListList&lt;Image&gt; 类型,然后你按ImageIDImageBytes 分组,那么之后会发生什么?你想要一个ImageView [ ] 的数组作为结果吗?抱歉,我还不明白
  • "将 blah 中的值分配给我的 Imageview。" blah 将有多个键值,您打算如何将其映射到单个 Imageview ?或者它是一个错字,你的意思是复数?
  • 抱歉,这是不可能的。要么您编写一个循环并执行此操作,要么您使用现有的解决方案,这反过来会在内部为您执行循环。

标签: c# linq foreach


【解决方案1】:

在您创建一个新的ImageView 的分组之后,您似乎需要一个Select

var blah = _imageList.GroupBy(i => new { i.ImageID, i.ImageBytes })
                     .Select(x => new ImageView
                     {
                        tag = x.Key.ImageID,
                        ImageData = x.Key.ImageBytes
                     }).ToList();

免责声明:我没有考虑其他 2 个属性,因为您没有在问题中指定它们。

注意byte [ ] 的分组可能会导致意想不到的结果。请注意,比较将在数组的引用之间进行,而不是在它们的内容之间进行。因此,如果不同对象确实共享单个 byte [ ] ImageBytes

相同引用,则您将只有同一个组

【讨论】:

  • 这正是我想要的。看起来比 foreach 循环更整洁。干杯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 2021-06-22
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多