C# 如何从对象数组中获取键值对
我在数据库里有两张桌子 表1“DocumentFieldValues”有两列FieldId和Value,以及 表2包含主键FieldId和FieldName的“字段” 我事先知道字段名,我想把它们做成一把钥匙。这里大约有100个键/值对C# 如何从对象数组中获取键值对,c#,arrays,.net,list,linq,C#,Arrays,.net,List,Linq,我在数据库里有两张桌子 表1“DocumentFieldValues”有两列FieldId和Value,以及 表2包含主键FieldId和FieldName的“字段” 我事先知道字段名,我想把它们做成一把钥匙。这里大约有100个键/值对 Attempt 1 var attempt1= db.DocumentFieldValues.Where(x => x.PolicyDocumentId == id).Include(x => x.Field ).ToList(); 尝试
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 } ;
我基本上需要能够执行data.FieldName并在前端使用jQuery ajax调用检索值到后端,只需要以正确的格式将这些数据传回
非常感谢您的帮助
我刚做了这个,这个很有效,但这是最好的方法吗?
我只有4个月的工作经验,只有1年的自学,没有后端代码,所以不要讨厌lol,我觉得从性能角度看,这是非常糟糕的
IDictionary<string, string> dict = new Dictionary<string, string>();
foreach (var item in bindingStringAndValue)
{
dict.Add(item.BindingString, item.Value);
}
IDictionary dict=new Dictionary();
foreach(bindingStringAndValue中的变量项)
{
dict.Add(item.BindingString,item.Value);
}
尝试4这是我现在遇到的最好的方式谢谢@Orel Eraki
var dict=db.DocumentFieldValues
.Where(dfv=>dfv.PolicyDocumentId==id)。包括(dfv=>dfv.Field)
.ToDictionary(dfv=>dfv.Field.BindingString,dfv=>dfv.Value)代码>你实际上做得很好
如果希望将值映射到字典中,可以执行以下操作
如果一个表上最多有100个字段名,这意味着数据库设计完全错误。很可能是一个未解决的N:M关系。您应该花时间重新设计数据库,并通过视图支持旧方法。该表专门用于问题名称,另一个表用于与该问题名称关联的值。用户可以在另一个页面上为保险单创建与此及其罚款无关的问题。这两个问题都应该有效,请仔细检查是否将DocumentFieldValues.FieldId作为外键(其中引用Fields.FieldId)。如果不这样做,请更新您的edmx模型。@Orel Eraki是的,其他两个将获取正确的数据,但第一个将获取更多的数据,它将创建一个对象数组,然后每个对象中都有一个包含更多对象的数组。尝试2完全获取了我需要的内容,但我需要bindingstring的值成为键,value的值成为键的值,键是绑定字符串的类型confusing@JoshRice,好的,那么您想将值映射到字典中。我已经提出了一个答案。非常感谢你,我知道有一个更好的方法可以做到这一点,而不是什么麻烦。但要考虑到这种方式在某种程度上是不同的,它更具表现力,更紧凑,变量更少。但是在good下,它们是相同的,因为您尝试生成IQueryable,所以当您实际迭代它时,它会生成您想要的项。基本上是一样的。
var dict = db.DocumentFieldValues
.Where(dfv => dfv.PolicyDocumentId == id)
.ToDictionary(dfv => dfv.Field.BindingString, dfv => dfv.Value);