LINQ to SQL: результаты хранимых процедур - PullRequest
6 голосов
/ 27 февраля 2009

Как изменить имя класса результата хранимой процедуры, сгенерированного LINQ для конструктора SQL (помимо работы с designer.cs)?

Кроме того, как выполнить запрос linq для набора результатов хранимой процедуры?

Ответы [ 2 ]

8 голосов
/ 27 февраля 2009

Можете ли вы отредактировать это в dbml? Лично я склонен рассматривать автоматически сгенерированные типы (из функций и хранимых процедур) как DTO, которые являются локальными для DAL, поэтому я немедленно переназначаю их в свое собственное представление POCO - т.е.

var qry = from row in ctx.SomeProc(12345)
          select new Foo {ID = row.ID, Name = row.Name };

и т.д.. По второму вопросу «Кроме того, как вы можете выполнить запрос linq для набора результатов хранимой процедуры?» - Я бы порекомендовал использовать UDF вместо хранимой процедуры, если вы хотите ее составить: это позволяет вам выполнять композицию в базе данных, например, подкачку и фильтрацию:

var qry = (from row in ctx.SomeFunction(12345)
          where row.IsActive
          select row).Skip(10).Take(10);

который должен (по крайней мере в LINQ-to-SQL) делать все на TSQL на сервере. В противном случае вы можете вызвать AsEnumerable() и использовать LINQ-to-Objects на вызывающем уровне .NET:

var qry = (from row in ctx.SomeProc(12345).AsEnumerable()
          where row.IsActive
          select row).Skip(10).Take(10);

Чтобы отредактировать dbml (который является просто xml), измените ElementType/@Name здесь:

<Function Name="dbo.CustOrderHist" Method="CustOrderHist">
  <Parameter Name="CustomerID" Parameter="customerID" Type="System.String" DbType="NChar(5)" />
  <ElementType Name="FooBar"> <!-- ********** HERE ************ -->
      <Column Name="ProductName" Type="System.String" DbType="NVarChar(40) NOT NULL" CanBeNull="false" />
      <Column Name="Total" Type="System.Int32" DbType="Int" CanBeNull="true" />
  </ElementType>
</Function>
2 голосов
/ 27 февраля 2009

Кроме того, как вы можете выполнить запрос linq на наборе результатов сохраненных процедура?

var query = from results in datacontext.storedprocedurename()
            where results.whatever == 1
            select results;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...