簡體   English   中英

如何使用Linq和C#在實體框架中獲取多個結果集?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM