如何使用Linq和C#在entity framework中获取多个结果集?

在我的存储过程中,我有两个基于两个结果集的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(); // do your stuff } } 

要“加入”这两个集合你可以使用一个元组集合

 Tuple 

由于上述方法仅适用于.NET 4.5及更高版本,因此您可以使用本文中的第一种方法。 它也适合你。 你可以在那里使用linq。 看看我的例子:

 public List 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(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 } }