将列表转换为字典

时间:2017-04-22 03:28:45

标签: c# entity-framework dictionary

我有以下课程:

public class Header
{
    public int Id { get; set; } 
    ....
}
public class Item
{
   public int Id { get; set; } 
   public int HeaderId { get; set; } //FK
   public int ItemSequence  { get; set; }
   public string Value { get; set; } 
   ...
}

HeaderItem具有一对多关系(每个Header都有很多Items

我关注Items

{{Id=1, HeaderId=1, ItemSequence  =1, Value="A"},
 {Id=2, HeaderId=1, ItemSequence  =2, Value="B"},
 {Id=3, HeaderId=2, ItemSequence  =1, Value="C"},
 {Id=4, HeaderId=2, ItemSequence  =2, Value="D"},
 {Id=5, HeaderId=2, ItemSequence  =3, Value="B"}}

我想写一个查询来查找字典,每个ItemSequenceHeader = 1)的密钥是ItemSequence,其他ItemSequence的值是 Key: {HeaderId=1, ItemSequence =1} , Values : {"A","B"} Key: {HeaderId=2, ItemSequence =1} , Values : {"C","D","B"} ,换句话说,我希望实现以下结果:

var result = ctx.Headers
                .SelectMany(x => x.Items
                                  .Select(t => new { t.Id,t.ItemSequence,t.HeaderId}))
                                  .?

我写了以下查询:

?

我应该使用哪个代码C:\dev\Delphi Projects\TNS

2 个答案:

答案 0 :(得分:0)

类似的东西:

var result =
   ctx
   .Headers
   .ToDictionary(          
      header => new {
         header.Id,
         header.Items.First().ItemSequence
      },
      header =>
         header
         .Items
         .Select(item => item.Value)
         .ToList()
   );

假设所有标题至少包含一个项目。

考虑到这一点,你可能想要第一个有序的 ItemSequence,在这种情况下使用类似的东西:

header.Items.OrderBy(item => item.ItemSequence).First().ItemSequence

要忽略没有使用任何项目的标题:

ctx
.Headers
.Where(header => header.Items.Any())
...

答案 1 :(得分:0)

在您想要的结果中, [java] Could not generate timestamp: Connection reset 始终等于1.我认为这是多余的。 您可以std::string word; while (word != "exit") { std::cin >> word; // your code } HeaderId并将其转换为字典,就像这样。

ItemSequence