【发布时间】: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<string, string>。我已经给出了答案。