Linq to sql linq to DICTORY上的错误消息-“;已经添加了具有相同键值的项";
我正在尝试使用基于ID(GUID)的linq创建集合。在使用字典时,我收到错误“已添加具有相同密钥的项”有任何建议吗Linq to sql linq to DICTORY上的错误消息-“;已经添加了具有相同键值的项";,linq-to-sql,Linq To Sql,我正在尝试使用基于ID(GUID)的linq创建集合。在使用字典时,我收到错误“已添加具有相同密钥的项”有任何建议吗 foreach (Guid i in ar) { var prod = (from r in datacontext.item_tables's where r.itemID == i select r); Dictionary<Guid, item_
foreach (Guid i in ar)
{
var prod = (from r in datacontext.item_tables's where r.itemID == i select r);
Dictionary<Guid, item_tables> tempdata =prod.ToDictionary(s => s.itemID);
Facet[] ftemp = new Facet[tempdata.Count];
string s1 = "";
ftemp[0] = new Facet("descriptiob", FacetType.Text, tempdata[i].Description);
ftemp[1] = new Facet("date", FacetType.Text, tempdata[i].uploaddate);
for (int iv = 0; iv < tempdata.Count; iv++)
{
s1 += tempdata[i].ProductName + " \n";
}
ftemp[2] = new Facet("ProductName", FacetType.Text, s1);
}
foreach(ar中的Guid i)
{
var prod=(来自datacontext.item_表中的r,其中r.itemID==i选择r);
Dictionary tempdata=prod.ToDictionary(s=>s.itemID);
Facet[]ftemp=新Facet[tempdata.Count];
字符串s1=“”;
ftemp[0]=新方面(“descriptiob”,facetype.Text,tempdata[i].Description);
ftemp[1]=新方面(“日期”,FacetType.Text,tempdata[i].上载日期);
for(intiv=0;iv
您基本上是在使用以下代码构建词典:
datacontext
.item_tables
.Where(r => r.itemID == i)
.ToDictionary(s => s.itemID);
Where
正在过滤结果,其中itemID
一次是一个特定的i
(Guid
),但可以返回零个、一个或多个结果。很明显,您得到的错误表明,对于i
的至少一个值,您将得到多个返回的记录
这意味着数据库未正确规范化或代码中存在逻辑错误
我觉得是后者
在代码的下面,您有以下循环:
for (int iv = 0; iv < tempdata.Count; iv++)
{
s1 += tempdata[i].ProductName + " \n";
}
我有一个父表项,它有6-7个子表,子表将itemid作为外键。item表中的每个项都可以关联到一个或多个产品。因此,为了从所有表中获取所有数据,我创建了一个视图,该视图是item_tables。现在我需要的是根据id获取所有数据并显示所有数据与该id关联的产品名称。希望我说得清楚。@bplvid-那么,再次查看代码时,您使用的是
tempdata[I]。description
,这让我觉得每个产品都有相同的描述?另外,uploaddate
和ItemName
也是通过这种方式访问的。我觉得这不太对。你能确认吗?嗨,谜一样的东西,也许我不清楚。对不起,我有一个项目涉及一个或多个产品。但是我的描述,每个项目的日期不同。所以我想获取描述,日期,图像和与一个项目相关联的所有产品名称。@bplvid-那么听起来你不需要按itemID
进行分组。您可以遍历item_表
,然后将每个表添加到集合中。是吗?我只需要一次选择一个id,然后将productname放入forloop,这样我就可以获取所有productname和其他数据,如描述,日期等。现在,我面临的困难是,如果我有4个产品名称与一个项目关联,我的silverlight pivotviewer将显示4个图像,而这不是我需要的一个图像,其中所有4个产品名称都与该项目关联。
var query =
from r in datacontext.item_tables
group r.ProductName by new
{
r.itemID,
r.Description,
r.uploaddate,
r.ItemName,
};
foreach (var items in query.ToArray())
{
var f0 = new Facet("descriptiob", FacetType.Text, items.Key.Description);
var f1 = new Facet("date", FacetType.Text, items.Key.uploaddate);
var f2 = new Facet("ProductName", FacetType.Text, String.Join("\n", items));
collection.AddItem(items.Key.ItemName, null, null, f0, f1, f2);
}