【问题标题】:Fetch Linq to Entity result directly into Datatable将 Linq to Entity 结果直接提取到 Datatable 中
【发布时间】:2013-09-12 03:23:20
【问题描述】:

我正在尝试使用 Linq 和实体 制作动态菜单。我想将查询结果直接添加到数据表中。选择查询(如下图)抛出异常。 例外:

LINQ to Entities 无法识别方法“System.Data.DataRow” LoadDataRow(System.Object[], Boolean)' 方法,而这个方法不能 被翻译成商店表达式

还有其他选择吗?下面是我的代码。

DataTable dtMenu = new DataTable();
dtMenu.Columns.Add("MenuName", typeof(string));
dtMenu.Columns.Add("SubMenuName", typeof(string));
dtMenu.Columns.Add("FileName", typeof(string));

var menuItems = (from vUser in dbMenu.VirtualUserMenuMaps
join menu in dbMenu.MenuMasters on vUser.MenuId equals menu.MenuId
join subMenu in dbMenu.SubMenuMasters on vUser.SubMenuId equals subMenu.SubMenuId
where vUser.VirtualId == virtualId
orderby menu.MenuId, subMenu.DisplayOrder
select dtMenu.LoadDataRow(
new object[] { menu.MenuName, subMenu.SubMenuName, subMenu.FileName }, false));

【问题讨论】:

    标签: c# linq entity-framework datatable


    【解决方案1】:

    你不能调用不能翻译成SQL query的方法,你应该像这样分两步来做:

    var menuItems =  from vUser in dbMenu.VirtualUserMenuMaps
                     join menu in dbMenu.MenuMasters on vUser.MenuId equals menu.MenuId
                     join subMenu in dbMenu.SubMenuMasters on vUser.SubMenuId equals subMenu.SubMenuId
                     where vUser.VirtualId == virtualId
                     orderby menu.MenuId, subMenu.DisplayOrder
                     select new { menu.MenuName, subMenu.SubMenuName, subMenu.FileName };
    foreach(var row in menuItems)
        dtMenu.LoadDataRow(new object[]{row.MenuName, row.SubMenuName, row.FileName}, false);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-24
      • 1970-01-01
      • 2013-02-17
      相关资源
      最近更新 更多