2011-01-28 3 views
2

У меня есть модель Linq-to-SQL, которая использует хранимые procs в некоторых местах для возврата объектов, где требуется более сложный SQL. Все это прекрасно работает.Конкретный объект Linq-to-SQL из SP

Теперь мне нужно вернуть пользовательский объект из 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, который вычисляет сотрудник Rota для любого дня, а затем возвращают этот объект. Я хочу переместить эту логику в хранимую процедуру, поэтому у меня есть полный контроль над sql (сгенерированный sql не большой), однако я не уверен, как вернуть этот объект?

+0

Почему вы не просто вернуть столбец Служащий PK (ов) вместо типа заполнения сотрудника и просто иметь стандартный анонимный тип, возвращающийся из процедуры через LINQ to SQL? Затем вы можете вручную заполнить полный Employee через второй запрос, который возвращает сотрудников и вручную объединить их. Это всего лишь несколько строк кода. – JohnOpincar

+0

@JohnOpincar - в этом случае это было то, что я сделал, спасибо. Однако, если бы у меня было много результатов, это, вероятно, не было бы тем, как я это делал, знаете ли вы, можно ли достичь того, что я просил? В любом случае, если вы опубликуете ответ, я приму его – Macros

ответ

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

Я хотел бы предложить создать конструктор для объекта Rota, который принимает результат sproc как параметр ... таким образом вы можете сделать

.Select(x => new Rota(x)).ToList<Rota>(); 
Смежные вопросы