Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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
.net 使用LINQ和存储过程获取一对多关系_.net_Sql_Linq - Fatal编程技术网

.net 使用LINQ和存储过程获取一对多关系

.net 使用LINQ和存储过程获取一对多关系,.net,sql,linq,.net,Sql,Linq,我有两张桌子: tbl_Orders id OrderN DateAdd 1 77-65 01.01.2011 2 77-73 24.01.2011 3 77-82 13.01.2011 4 77-86 15.01.2011 5 77-89 11.01.2011 tbl_OrdersList id OrderId

我有两张桌子:

tbl_Orders
id       OrderN        DateAdd
1        77-65        01.01.2011
2        77-73        24.01.2011
3        77-82        13.01.2011
4        77-86        15.01.2011
5        77-89        11.01.2011


tbl_OrdersList
id       OrderId        ItemId
1        1              23
2        1              32
3        3              33
4        5              45 
5        5              48
tbl_订单中有订单,tbl_订单列表中的订单中有采购。 因此,系统中有5个订单:

  • 订单1(id=1)=2次采购(itemsId=23,32)
  • 订单2(id=2)-空
  • 订单3(id=3)=1次采购(itemsId=33)
  • Order4(id=4)-空
  • 订单5(id=5)=2次采购(itemsId=45,48)
  • 所以,我使用LINQ2Sql,我希望执行存储过程,而不是由linqsql代码生成的

    如何更好地编写此存储过程?是否有一些usp(第一个用于订单,第二个用于订单列表)

    执行usp后,如何更好地建立关系(例如,使用生成的类和LINQ生成的代码,我可以这样做:

    // Orders - get orders from tbl using dataContext and tbl_Orders
    foreach(var order in Orders){
        foreach(var orderlist in order.OrdersList) {
    
        }
    }
    

    Linq2Sql是Linq最薄弱的一环。它生成的SQL对于简单的情况来说是不错的,但当你对代码进行最后润色时,它往往会退化。退化可能是1000倍甚至更糟。这是一个甜蜜的陷阱:一开始很好,但当你的截止日期临近时,它就会变得一团糟


    我养成了编写存储过程的习惯。

    那么。我的问题有什么问题吗?我知道usp通常更好,但我如何将结果映射到Orders和Orders之类的对象。OrdersList?向项目中添加一个DBML文件。将存储过程从服务器资源管理器拖到DBML文件中。这将生成一个带有C#函数的DataContext它将把存储过程映射到一个对象。它将使用自动生成的类型进行映射。我已经找到了一种方法来映射我需要的返回类型。我的问题的答案是属性窗口中的属性“return type”,当您已经将usp拖到dbml方法并单击它时。默认情况下,有自动生成的类型,但我可以将其更改为“Orde”r’型。
     Dim q = From o In Orders, ol In OrdersList _
               where o.id Equals ol.OrderId Into ords = Group _
                From ol In ords.DefaultIfEmpty _
                Select New With {o.OrderN, o.DateAdd,ords.ItemID}