【问题标题】:How to use LINQ to populate a object with a List<int> and a String?如何使用 LINQ 用 List<int> 和 String 填充对象?
【发布时间】:2019-10-30 19:10:45
【问题描述】:

我正在使用 Entity Framework 6.3 和 LINQ 从表中查询并填充下面的 DTO 对象:

public class MyObject
{
   public string Name { get; set; }
   public List<int> Number { get; set; }

   public MyClass()
   {
       Number = new List<int>();
   }
}

在这个特定的表(遗留项目)中,Name 可以有多个 Numbers,因此我需要将其用作列表。

表格如下所示:

Name      Number
abc       15371
abc       15079
abc       15371
abc       30392
xyz       30373
xyz       13141

目前我的代码如下:

List<MyObjetct> myObject = new List<MyObjetct>();

myObject = contex.TableName.Where(x => listOfNames.Contains(x.Name))
                           .Select( y => new MyObject() 
                           {
                              name = y.name
                              number = *populate the list of numbers*
                           });

我希望用名称和数字列表填充 MyObjects 列表。

【问题讨论】:

  • 名称字段中的数字结构如何?我们看不到您的数据。
  • @Amy 用表格编辑了问题
  • 您想按名称分组并获取相应的数字作为列表吗?
  • 我明白了。您的问题的措辞方式听起来像是名称字段包含数字。
  • 那么你应该使用类似...GroupBy(x=&gt;x.Key).Select(x=&gt;new { x.Key, list = x.Select(y=&gt;y.num).ToList()})

标签: c# linq c#-4.0 entity-framework-6


【解决方案1】:

试试这个:

myObject = contex.TableName.GroupBy(t => t.Name)
.Where(g => listOfNames.Contains(g.Key))
.Select(g => new MyObject()
{
    name = g.Key,
    number = g.Select(n => n.Number).ToList()
}).ToList();

输出:

姓名/号码

abc / 15371,15079,15371,30392

xyz / 30373,13141

我注意到您的数据样本有重复的名称/数字组合。不确定这是否只是一个错字,或者您是否需要考虑这一点。

【讨论】:

  • 不应该将ToListnumber = g.Select(n =&gt; n.Number).ToList() 放在一起
  • 正如@Rakesh 所说,ToList() 必须在number = g.Select(n =&gt; n.Number).ToList() 之后。
  • 谢谢你们,它按预期工作。我只在number = g.Select(n =&gt; n.Number).Distinct().ToList() 之后添加了Distinct() 以过滤更多结果。
  • @Rakesh 数据样本是正确的。使用Distinct() 解决了这个问题。
  • @Rakesh:你是对的。它应该使用ToList。我通常针对IEnumerable 接口进行编码,因此出现了问题。我会更新代码,但我建议 OP 改用 IEnumerable&lt;T&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多