需要另一种方法来进行 SQL 到 LINQ 的转换
Need a alternate approch to do SQL to LINQ conversion
我正在尝试为我的视图获取特定的结果集以进行绑定。我是 Linq 表达式的新手,所以我不太确定不同的实现方式。
这是我的 MenuModel
public class MenuModel : DisposeBase
{
public string ParentID { get; set; }
public string ParentName { get; set; }
public List<MenuItemModel> MenuItems { get; set; }
}
我的MenuItemModel
public class MenuItemModel : DisposeBase
{
public string ChildID { get; set; }
public string ChildName { get; set; }
public string PageURL { get; set; }
}
MenuModel
是我期望作为结果集的输出类型。我从后端
得到类型 DataTable
的结果集
DataTable dtable = oDatabase.ExecuteAdapter(System.Data.CommandType.StoredProcedure, "SP_GETUSERNAVMENUDATA");
这是我的 SQL 结果集,
My DataTable will looks like this
现在我需要将此数据表转换为 MenuModel
类型。
我尝试查询不同的 MenuModel
并基于此构建 MenuItemModel
对象。
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>();
}
但是我在构建 MenuItemModel
时仍然遇到转换错误。现在我想知道,是否有任何最佳实践可以对这些嵌套 class 类型进行相同的转换?我相信这样做应该很简单。
如有任何帮助,我们将不胜感激。谢谢!
注意:DataTableToList 是一种将 DataTable 对象转换为特定通用类型的方法
不清楚您的 DataTableToList<MenuModel>()
方法在做什么或 returning,但它需要 return 包含数据中表示的所有 5 个属性的模型集合table.
假设您有以下模型
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();
或者您可以在 DataTable
上使用 .AsEnumerable()
并引用列名称
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"],
....
我正在尝试为我的视图获取特定的结果集以进行绑定。我是 Linq 表达式的新手,所以我不太确定不同的实现方式。
这是我的 MenuModel
public class MenuModel : DisposeBase
{
public string ParentID { get; set; }
public string ParentName { get; set; }
public List<MenuItemModel> MenuItems { get; set; }
}
我的MenuItemModel
public class MenuItemModel : DisposeBase
{
public string ChildID { get; set; }
public string ChildName { get; set; }
public string PageURL { get; set; }
}
MenuModel
是我期望作为结果集的输出类型。我从后端
DataTable
的结果集
DataTable dtable = oDatabase.ExecuteAdapter(System.Data.CommandType.StoredProcedure, "SP_GETUSERNAVMENUDATA");
这是我的 SQL 结果集,
My DataTable will looks like this
现在我需要将此数据表转换为 MenuModel
类型。
我尝试查询不同的 MenuModel
并基于此构建 MenuItemModel
对象。
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>();
}
但是我在构建 MenuItemModel
时仍然遇到转换错误。现在我想知道,是否有任何最佳实践可以对这些嵌套 class 类型进行相同的转换?我相信这样做应该很简单。
如有任何帮助,我们将不胜感激。谢谢!
注意:DataTableToList 是一种将 DataTable 对象转换为特定通用类型的方法
不清楚您的 DataTableToList<MenuModel>()
方法在做什么或 returning,但它需要 return 包含数据中表示的所有 5 个属性的模型集合table.
假设您有以下模型
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();
或者您可以在 DataTable
上使用 .AsEnumerable()
并引用列名称
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"],
....