Linq to sql linq to DICTORY上的错误消息-“;已经添加了具有相同键值的项";

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_

我正在尝试使用基于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_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); 
}