鉴于以下数据类,
public class EmployeeMenu
{
public int ID { get; set; }
public string HeaderName { get; set; }
public List<string> ItemNames { get; set; }
}
如何在ItemNames
字段中获取子查询?
我目前的
查询 IQueryable<EmployeeMenu> retValue =
from mh in menuHeaders
select new EmployeeMenu
{
ID = mh.ID,
HeaderName = mh.HeaderName,
ItemNames = (from mhi in mh.MenuItems
select mhi.MenuItemName).ToList<string>()
};
似乎没有做到这一点......
数据结构是
MenuHeaders MenuItems
----------- ---------
ID ID
HeaderName <-(FK)--MenuHeaderID
MenuItemName
答案 0 :(得分:3)
我最终只是从List更改为IEnumerable。这解决了它。
答案 1 :(得分:0)
您是否只想在子选择中放置一个位置,将其过滤到MenuHeaderID等于mh.HeaderName的所有菜单项。如果你愿意,也可以使用StringComparison类型.Equals()。
这是一个例子......
IQueryable<EmployeeMenu> retValue =
from mh in menuHeaders
select new EmployeeMenu
{
ID = mh.ID,
HeaderName = mh.HeaderName,
ItemNames = (from mhi in mh.MenuItems
select mhi.MenuItemName where mhi.MenuHeaderID = mh.HeaderName).ToList<string>()
};
答案 2 :(得分:0)
我的猜测是你没有在课堂上初始化列表。我的基础是我对Nhibernate的经验。
public class EmployeeMenu
{
public int ID { get; set; }
public string HeaderName { get; set; }
public List<string> ItemNames { get; set; }
public EmployeeMenu()
{
ItemNames=new List<string>();
}
}
希望这有帮助。
答案 3 :(得分:0)
好。尝试替换
(from mhi in mh.MenuItems
select mhi.MenuItemName).ToList<string>()
通过
mh.MenuItems
.AsEnumerable()
.Select(mhi => mhi.MenuItemName)
.ToList()
我怀疑你是否想在那里找到where子句,但这应该会让你超越运行时异常。
每当您看到“LINQ to Entities确认方法的形式的错误消息......并且此方法无法转换为商店表达式”LINQ to Entities告诉您它无法弄清楚如何将表达式树的一部分转换为SQL语句。这意味着您需要提取客户端,以便LINQ to Entities不会尝试翻译无法翻译的内容。