Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要另一种方法来进行SQL到LINQ的转换吗_C#_Linq_Asp.net Mvc 3 - Fatal编程技术网

C# 需要另一种方法来进行SQL到LINQ的转换吗

C# 需要另一种方法来进行SQL到LINQ的转换吗,c#,linq,asp.net-mvc-3,C#,Linq,Asp.net Mvc 3,我正在尝试为视图绑定一个特定的结果集。我是Linq expression的新手,所以我不太确定使用不同的方法 这是我的MenuModel public class MenuModel : DisposeBase { public string ParentID { get; set; } public string ParentName { get; set; } public List<MenuItemModel> MenuI

我正在尝试为视图绑定一个特定的结果集。我是Linq expression的新手,所以我不太确定使用不同的方法

这是我的
MenuModel

public class MenuModel : DisposeBase
    {
        public string ParentID { get; set; }
        public string ParentName { get; set; }
        public List<MenuItemModel> MenuItems { get; set; }
    }
MenuModel
是我期望作为结果集的输出类型。我正在从后端获取类型为
DataTable
的结果集

DataTable dtable = oDatabase.ExecuteAdapter(System.Data.CommandType.StoredProcedure, "SP_GETUSERNAVMENUDATA");
这是我的SQL结果集

现在我需要将这个数据表转换为类型
MenuModel

我试图查询distinct
MenuModel
并以此为基础构建
menuitemodel
对象

List<MenuModel> lstMenuModel = dtable.DataTableToList<MenuModel>()
                                            .GroupBy(p => new { p.ParentID, p.ParentName })
                                            .Select(g => g.First())
                                            .ToList<MenuModel>();

            foreach (MenuModel parentItem in lstMenuModel)
            {
                List<MenuItemModel> lstUserMenuItemData = dtable.DataTableToList<MenuItemModel>()
                                                .Select(i => new { i.ChildID, i.ChildName, i.PageURL, i.ParentID })
                                                .Where(i => i.ParentID.Equals(parentItem.ParentID))
                                                .ToList<MenuItemModel>();
            }
List lstMenuModel=dtable.DataTableToList()
.GroupBy(p=>new{p.ParentID,p.ParentName})
.Select(g=>g.First())
.ToList();
foreach(lstMenuModel中的MenuModel父项)
{
列表lstUserMenuItemData=dtable.DataTableToList()
.Select(i=>new{i.ChildID,i.ChildName,i.PageURL,i.ParentID})
其中(i=>i.ParentID.Equals(parentItem.ParentID))
.ToList();
}
但在构建
menuitemodel
时,仍然会出现转换错误。现在我想知道,对这些嵌套的类类型进行同样的转换有什么最佳实践吗?我相信应该有一些简单的方法来做到这一点

任何帮助都将不胜感激。谢谢


注意:DataTableToList是一种将DataTable对象转换为特定泛型类型的方法

不清楚您的
DataTableToList()
方法正在执行或返回什么,但它需要返回包含数据表中表示的所有5个属性的模型集合

假设您有以下模型

public class MenuSQLSet
{
    public string ParentID { get; set; }
    public string ParentName { get; set; }
    public string ChildID { get; set; }
    public string ChildName { get; set; }
    public string PageURL { get; set; }
}
那么您的查询应该是

List<MenuModel> lstMenuModel = dtable.DataTableToList<MenuSQLSet>()
    .GroupBy(x => new { x.ParentID, x.ParentName })
    .Select(x => new MenuModel()
    {
        ParentID = x.Key.ParentID,
        ParentName = x.Key.ParentName,
        MenuItems = x.Select(y => new MenuItemModel()
        {
            ChildID = y.ChildID,
            ChildName = y.ChildName,
            PageURL = y.PageURL
        }).ToList()
    }).ToList();

PARENTID和CHILDID中的值是什么意思?什么是
DataTableToList()
?为了生成所需的模型,该方法需要投影到一个包含所有5个属性的模型中。parentId是父菜单的ID,CHILDID是特定父菜单中子菜单的ID@MarkoJuvančič我已经更新了我的问题,请在我问题的末尾找到注释。如果我创建了一个包含所有5个属性的类,那么最终可能会复制这些属性。单个父对象可以有多个子对象。我想以我提到的相同方式维护模型关系@StephenMuecke@KarthickJayaraman,您必须首先将所有5个属性投影到一个模型中,并对其进行分组(或在
数据表上使用
.AsEnumerable()
,并引用有点难看的列名)-您不会以重复作为旁注,究竟为什么要将SP返回的数据转换为DataTable,然后再将DataTable转换为模型。这是我今年看到的第二个仍然使用数据表的MVC问题-我以为你们都灭绝了:)-你应该使用
DataReader
直接读取模型集合。
List<MenuModel> lstMenuModel = dtable.DataTableToList<MenuSQLSet>()
    .GroupBy(x => new { x.ParentID, x.ParentName })
    .Select(x => new MenuModel()
    {
        ParentID = x.Key.ParentID,
        ParentName = x.Key.ParentName,
        MenuItems = x.Select(y => new MenuItemModel()
        {
            ChildID = y.ChildID,
            ChildName = y.ChildName,
            PageURL = y.PageURL
        }).ToList()
    }).ToList();
List<MenuModel> lstMenuModel = dtable.AsEnumerable()
    .GroupBy(x => new { ParentID = x["ParentID"], ParentName = x["ParentName"] })
    .Select(x => new MenuModel()
    {
        ParentID = x.Key.ParentID,
        ParentName = x.Key.ParentName,
        MenuItems = x.Select(y => new MenuItemModel()
        {
            ChildID = y["ChildID"],
            ....