【问题标题】:Linq-to-SQL complex custom object from SP来自 SP 的 Linq-to-SQL 复杂自定义对象
【发布时间】:2011-12-17 03:53:40
【问题描述】:

我有一个 Linq-to-SQL 模型,它在某些地方使用存储过程来返回需要更复杂 SQL 的对象。这一切都很好。

我现在需要从还封装了 Linq-to-SQL 对象的 SP 返回一个自定义对象。例如,我有一个基于Employee 表的名为Employee 的类。我还有一个名为rota 的自定义类,定义如下:

public class rota
{
    public Employee employee{ get; set; }
    public int DisplayOrder { get; set; }
    public DateTime StartingTime { get; set; }
    public DateTime FinishTime { get; set; }
}

我有一些相当复杂的 linq,可以计算任何一天的员工名单,然后返回该对象。我想将此逻辑移动到存储过程中,以便完全控制 sql(生成的 sql 不是很好)但是我不确定如何返回该对象?

【问题讨论】:

  • 您为什么不直接返回员工 PK 列来代替员工复杂类型,并通过 LINQ to SQL 从过程中返回标准匿名类型?然后,您可以通过返回员工的第二个查询手动填充完整的员工并手动合并两者。只需几行代码。
  • @JohnOpincar - 在这种情况下,这就是我所做的,谢谢。但是,如果我有大量结果,这可能不是我的方式,你知道是否有可能实现我的要求?无论哪种方式,如果您发布答案,我会接受它

标签: c# linq-to-sql


【解决方案1】:

我相信这会起作用,尽管我没有运行它。如果没有,我知道您可以使用返回表变量的 SQL 函数来执行此操作。

from x in dataContext.StoredProc("", "", "")
select new Rota {
    DisplayOrder = x.DisplayOrder,
    StartingTime = x.StartingTime,
    FinishTime = x.FinishTime,
    Employee = new Employee {
        EmployeeId = x.EmployeeId,
        Name = x.EmployeeName
    }
}

【讨论】:

    【解决方案2】:

    我建议为 Rota 对象创建一个构造函数,将 sproc 结果作为参数...你可以这样做

    .Select(x => new Rota(x)).ToList<Rota>();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      相关资源
      最近更新 更多