我正在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中。
谷歌搜索德语错误消息根本找不到任何结果,我的翻译也没有(这可能与原来的措辞相差太远)。
任何想法导致了什么?
答案 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)
});