gpt4 book ai didi

c# - 尝试使用 LINQ 连接对象名称时出现 "The element access is not permitted"错误

转载 作者:太空宇宙 更新时间:2023-11-03 11:04:50 25 4
gpt4 key购买 nike

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

| Adenocarcinoma | Lungs, Mammary glands, |

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

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

The element access "System.String Name" of "ToyApp.Organ" is not permitted for the type "System.Collections.Generic.IEnumerable`1[ToyApp.Organ]"

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

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

知道是什么原因造成的吗?

最佳答案

我怀疑 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)
});

关于c# - 尝试使用 LINQ 连接对象名称时出现 "The element access is not permitted"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16276777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com