2

我正在 LINQ 中迈出第一步。使用 LINQ to SQL,我正在尝试编写一个相对简单的查询,给定一个在肺部和乳腺中患有腺癌的小鼠,它将返回小鼠的肿瘤,准备在格式如下的 gridview 中显示

| 腺癌 | 肺,乳腺,|

与此答案中的示例类似,我编写了查询

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" ist für den Typ "System.Collections.Generic.IEnumerable`1[ToyApp.Organ]" nicht zulässig。

我找不到返回原始错误的翻译。我最好的翻译方法是:

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

如果我选择 Organs=tumor.Organs 而不是尝试加入器官名称,则一切正常,并且我正在为每个肿瘤收集器官,因此问题一定出在串联而不是 ORM 中。

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

任何想法是什么原因造成的?

4

1 回答 1

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)
               });
于 2013-04-29T10:54:34.497 回答