LINQ查询返回List<>作为班级成员

时间:2010-11-15 20:08:32

标签: linq list select

鉴于以下数据类,

 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

4 个答案:

答案 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不会尝试翻译无法翻译的内容。