尝试使用LINQ连接对象名时,“不允许元素访问”错误

时间:2013-04-29 10:50:56

标签: c# linq runtime-error

我正在LINQ中完成我的第一步。使用LINQ to SQL,我正在尝试编写一个相对简单的查询,如果在肺部和乳腺中有一个带有腺癌的小鼠,它将返回鼠标的肿瘤,准备在格式化的网格视图中显示

  

|腺癌|肺,乳腺,|

this answer中的示例类似,我编写了查询

var tumors = from tumor in dc.Tumors
             where tumor.FK_Mouse == mouse.ID
             select new
             {
                 Name=tumor.Name, 
                 Organs=string.Join(", ", tumor.Organs.Select(t => t.Name))
             };

我得到的是一个错误。原始文本(我的IIS已本地化为德语)是:

  

Der Elementzugriff“System.String Name”von“ToyApp.Organ”istfürden   键入“System.Collections.Generic.IEnumerable`1 [ToyApp.Organ]”nicht   zulässig。

我找不到原始错误的翻译。我最好尝试翻译它:

  

该类型不允许“ToyApp.Organ”的元素访问“System.String Name”   “System.Collections.Generic.IEnumerable`1 [ToyApp.Organ]”

如果我选择Organs = tumor.Organs而不是试图加入器官名称,一切都运转正常,我得到每个肿瘤的器官集合,所以问题必须在连接而不是在ORM中。

谷歌搜索德语错误消息根本找不到任何结果,我的翻译也没有(这可能与原来的措辞相差太远)。

任何想法导致了什么?

1 个答案:

答案 0 :(得分:2)

我怀疑在LINQ to SQL部分中根本不支持连接。因此,在SQL部分中获取所需的所有数据,然后切换到进程LINQ to Objects以进行连接:

var tumors = dc.Tumors
               .Where(tumor => tumor.FK_Mouse == mouse.ID)
               .Select(tumor => new { 
                   tumor.Name, 
                   Organs = tumor.Organs.Select(o => o.Name)
               })
               .AsEnumerable() // Switch to LINQ to Objects
               .Select(tumor => new {
                   tumor.Name,
                   Organs = string.Join(", ", tumor.Organs)
               });