2011-01-28 106 views
2

我有一个Linq-to-SQL模型,它在某些地方使用存储过程来返回需要更复杂SQL的对象。这一切工作正常。来自SP的Linq-to-SQL复杂自定义对象

我现在需要从一个SP中返回一个自定义对象,它也封装了一个Linq-to-SQL对象。例如,我有一个基于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不是很好),但我不知道如何返回该对象?

+0

你为什么不只是返回员工PK列(s)代替雇员complext类型,并且只是通过LINQ to SQL从程序返回标准匿名类型?然后,您可以通过第二个查询返回员工并手动合并这两个手动来填充完整员工。这只会是几行代码。 – JohnOpincar 2011-01-28 13:56:35

回答

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 
    } 
} 
1

我建议创建的罗塔对象需要存储过程的结果作为一个参数的构造函数...这样,你可以做

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