LINQ to SQL:存储过程结果

6

除了修改 designer.cs 文件,我该如何更改由 LINQ to SQL 设计器生成的存储过程结果的类名?

另外,如何对存储过程的结果集执行 LINQ 查询?


一篇有用的文章:http://blog.benhall.me.uk/2008/05/linq-to-sql-stored-procedure-vs.html - Ronnie Overby
2个回答

8

你能在dbml中编辑这个吗?个人而言,我倾向于将自动生成的类型(来自函数和存储过程)视为本地于数据访问层的DTO,因此我立即将它们重新映射到我自己的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()方法并在.NET层上使用LINQ-to-Objects。

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>

哎呀!当使用LINQ时,你知道什么真正有帮助吗?那就是使用System.Linq;。 - Ronnie Overby

2
此外,您如何对存储过程的结果集执行Linq查询?
var query = from results in datacontext.storedprocedurename()
            where results.whatever == 1
            select results;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接