【问题标题】:How to get a key value pair out of an array of objects如何从对象数组中获取键值对
【发布时间】:2018-10-30 16:09:00
【问题描述】:

我在数据库中有两个表 表一“DocumentFieldValues”有 2 列 FieldId 和 Value 和 表二“字段”,主键为 FieldId 和 FieldName

我事先知道 FieldName,我想将它们设为 Key。大约有 100 个键/值对。

Attempt 1 

   var attempt1= db.DocumentFieldValues.Where(x => x.PolicyDocumentId == id).Include(x => x.Field ).ToList();

尝试 2

        var documentFieldValues = this.db.DocumentFieldValues.Where(x => x.PolicyDocumentId == id).ToArray();

        var bindingStringAndValue = from documentFieldValue in documentFieldValues
                       join field in this.db.Fields on documentFieldValue.FieldId equals field.FieldId
                       select new {  field.BindingString,  documentFieldValue.Value } ;

我基本上需要能够在前端使用 jQuery ajax 调用对后端执行 data.FieldName 并检索值,只需将这些数据以正确的格式传回即可。

非常感谢任何帮助。

我刚做了这个,这行得通,但这是最好的方法吗? 我只有 4 个月的工作经验,只有 1 年的自学经验,没有后端代码,所以不要讨厌哈哈,我觉得性能方面这很糟糕

    IDictionary<string, string> dict = new Dictionary<string, string>();

        foreach (var item in bindingStringAndValue)
        {
            dict.Add(item.BindingString, item.Value);
        }

尝试 4 这是我现在遇到的最好方法,感谢@Orel Eraki

var dict = db.DocumentFieldValues .Where(dfv => dfv.PolicyDocumentId == id).Include(dfv => dfv.Field) .ToDictionary(dfv => dfv.Field.BindingString, dfv => dfv.Value);

【问题讨论】:

  • 如果你在一张表上最多有 100 个字段名,这意味着数据库设计是完全错误的。可能是未解决的 N:M 关系。您应该花时间重新设计数据库并通过视图支持旧方式。
  • 该表专门用于问题名称,另一个表用于与该问题名称关联的值。用户可以在与此和罚款无关的另一个页面上为保险表格创建自己的问题。
  • 它们都应该工作,仔细检查你把 DocumentFieldValues.FieldId 作为外键(引用 Fields.FieldId)。如果不这样做并更新您的 edmx 模型。
  • @Orel Eraki 所以是的,另外两个会抓取正确的数据,但是第一个它会抓取一大堆更多的数据,它会创建一个对象数组,然后每个对象都有一个包含更多对象的数组。尝试 2 正好抓住了我需要的东西,但我需要 bindingstring 的值成为键,而 Value 的值成为键的值,这是令人困惑的绑定字符串
  • @JoshRice,好的,所以您想将您的值映射到 Dictionary&lt;string, string&gt;。我已经给出了答案。

标签: c# arrays .net list linq


【解决方案1】:

你确实做得很好。

如果您希望将您的值映射到 Dictionary&lt;string, string&gt;,您可以执行以下操作。

var dict = db.DocumentFieldValues
    .Where(dfv => dfv.PolicyDocumentId == id)
    .ToDictionary(dfv => dfv.Field.BindingString, dfv => dfv.Value);

【讨论】:

  • 非常感谢,我知道有比 foreach 更好的方法来做到这一点
  • 没问题。但请考虑到这种方式的不同之处在于它更具表现力、更紧凑且变化更少。但是在好的情况下它们是相同的,因为你尝试产生 IQueryable 所以当你实际迭代它时它会产生你想要的项目。基本上是一样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
相关资源
最近更新 更多