[英]How to get Multiple Result Set in Entity Framework using Linq with C#?
在我的存儲過程中,我有兩個基於兩個結果集的select語句我想使用linq和c#代碼獲取詳細信息。
以下是我的存儲過程:
Create Proc SP_GetResult
As
Begin
Select Id,Name from EmployeeTable;
Select ContactNo,DateOfBirth from Customer;
End
我嘗試下面的代碼使用Linq調用存儲過程:
Public void SelectValues()
{
using (Entities1 entity = new Entities1())
{
var list = entity.SP_GetResult
foreach (var test in list)
{
var test12123 = test;
}
}
}
我只能得到EmployeeTable的詳細信息。 但是,我無法獲得客戶表詳細信息。
怎么做 ?
任何的想法 ?
這是可以實現的,在MSDN中有一個很好的解釋。 查看這篇文章,它展示了實現它的兩種方法:
https://msdn.microsoft.com/en-us/data/jj691402.aspx
對於您的要求,請使用方法2(在EDMX中配置多個結果集)。
一旦你這樣做你可以使用Linq沒有問題的那些結果。例如
Public void SelectValues()
{
using (Entities1 entity = new Entities1())
{
var Employees = entity.SP_GetResult;
var Customers = Employees.GetNextResult<Customer>();
// do your stuff
}
}
要“加入”這兩個集合你可以使用一個元組集合
Tuple<EmployeeTable, Customer>
由於上述方法僅適用於.NET 4.5及更高版本,因此您可以使用本文中的第一種方法。 它也適合你。 你可以在那里使用linq。 看看我的例子:
public List<EmployeeTable> GetEmployees()
{
using(var ctx = new myEntities())
{
var cmd = ctx.Database.Connection.CreateCommand();
cmd.CommandText = "[dbo].[SP_GetResult]";
var reader = cmd.ExecuteReader();
//reader.NextResult(); <- uncomment this to get second result(Customer)
var employees = ((IObjectContextAdapter)db)
.ObjectContext
.Translate<EmployeeTable>(reader, "EmployeeTable", MergeOption.AppendOnly);
return employees;
}
現在您可以使用linq:
var boss = GetEmployees().FirstOrDefault(x => x.Name == "BossName");
替代方案:
實際上做這樣簡單的查詢你不需要在一個sp中。 你甚至不需要存儲過程。 只有EF你可以這樣得到它:
using (var ctx = new myEntities())
{
var employyes = from x in ctx.EmployeeTable select new
{
id = x.Id,
name = x.Name
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.