使用Linq压缩名称/值集合

时间:2015-11-18 20:31:11

标签: c# sql linq

下面的IGrouping结果显示了一些示例表单数据。我在数据库中存储名称/值对以收集表单数据。以下数据是我从填写表单的用户那里收集的基本示例。

LinqPad screenshot 我想要一个linq查询或SQL查询,提供此数据的扁平版本。例如csv数据:

FirstName,LastName,Email,EmailVerify,Meta
sdfsdf,sdfsdf,yu@yu.com,yu@yu.com,

记录与EntryKey相关。如何获得上述示例的结果数据?感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用XML或JSON序列化来实现此目的。序列化后,您可以非常轻松地将数据转换为纯文本

以下链接可帮助您编写序列化和反序列化代码。

<强>更新 要动态获取属性,可以使用ExpandoObject(使用System.Dynamic命名空间),这将帮助您动态定义属性。生成后,您可以将其序列化为指定的Type。以下是帮助的示例代码。

    var xNewExpando = new ExpandoObject() as IDictionary<string, Object>;

    foreach (var adv in advocateDetails)
    {
        xNewExpando.Add(adv.DetailName, adv.DetailValue);
    }

    var yourString = JsonConvert.SerializeObject(xNewExpando);

答案 1 :(得分:0)

我认为你应该能够做到这样的事情:

var results = db.EntryDetails
  .GroupBy(ed => ed.EntryKey)
  .ToList()
  .Select(ek => new List<List<string>>()
    {
      ek.Select(gb => gb.DetailName).ToList(),
      ek.Select(gb => gb.DetailValue).ToList()
    });
  .SelectMany(ed => ed)
  .ToList();

结果将是List<List<string>>

第一行List<>是每行。

每个列表的内容都是List<string>列。