不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii  用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
  Linq的SelectMany方法使用示例
编辑:dnawo 日期:2013-07-10
					  在EF中,由于数据库表之间存在外键,类似下面的实体随处可见(对象有一个集合类型属性):
若要求页面按如下格式展示数据,试考虑如何写Linq语句:
 引用内容
 引用内容
简单的inner join可以用Join方法实现:
针对这种特殊结构的对象,还可以用SelectMany来实现:
这好像看不出优势,但若要实现left join,那就非用SelectMany不可了:
SQL Server Profiler捕获对应sql语句:
					   
					   
					   
					   
					   复制内容到剪贴板 程序代码
 程序代码
 程序代码
 程序代码public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public Nullable<int> Age { get; set; }
public virtual ICollection<Pet> Pets { get; set; }
}
{
public int Id { get; set; }
public string Name { get; set; }
public Nullable<int> Age { get; set; }
public virtual ICollection<Pet> Pets { get; set; }
}
若要求页面按如下格式展示数据,试考虑如何写Linq语句:
 引用内容
 引用内容person1,pet1
person2,pet2
person3,pet3
person2,pet2
person3,pet3
简单的inner join可以用Join方法实现:
复制内容到剪贴板 程序代码
 程序代码
 程序代码
 程序代码var data = context.People.Join(context.Pets, person => person.Id, pet => pet.Pid, (person, pet) => new { Name = person.Name, PName = pet.Name });
针对这种特殊结构的对象,还可以用SelectMany来实现:
复制内容到剪贴板 程序代码
 程序代码
 程序代码
 程序代码var data = context.People.SelectMany(person => person.Pets, (person, pet) => new { Name = person.Name, PName = pet.Name });
这好像看不出优势,但若要实现left join,那就非用SelectMany不可了:
复制内容到剪贴板 程序代码
 程序代码
 程序代码
 程序代码var data = context.People.GroupJoin(context.Pets, person => person.Id, pet => pet.Pid, (person, pets) => new { person = person, pets = pets }).SelectMany(item => item.pets.DefaultIfEmpty(), (item, pet) => new { Name = item.person.Name, PName = pet == null ? "-" : pet.Name });
//or
var data = context.People.SelectMany(person => person.Pets.DefaultIfEmpty(), (person, pet) => new { Name = person.Name, PName = pet == null ? "-" : pet.Name });
//or
var data = context.People.SelectMany(person => person.Pets.DefaultIfEmpty(), (person, pet) => new { Name = person.Name, PName = pet == null ? "-" : pet.Name });
SQL Server Profiler捕获对应sql语句:
复制内容到剪贴板 程序代码
 程序代码
 程序代码
 程序代码Select 
[Extent1].[Id] AS [Id],
[Extent1].[Name] AS [Name],
CASE WHEN ([Extent2].[Id] IS NULL) THEN N'-' ELSE [Extent2].[Name] END AS [C1]
FROM [dbo].[Person] AS [Extent1]
LEFT OUTER JOIN [dbo].[Pet] AS [Extent2] ON [Extent1].[Id] = [Extent2].[Pid]
[Extent1].[Id] AS [Id],
[Extent1].[Name] AS [Name],
CASE WHEN ([Extent2].[Id] IS NULL) THEN N'-' ELSE [Extent2].[Name] END AS [C1]
FROM [dbo].[Person] AS [Extent1]
LEFT OUTER JOIN [dbo].[Pet] AS [Extent2] ON [Extent1].[Id] = [Extent2].[Pid]
评论: 0 | 引用: 0 | 查看次数: 4113
					   
发表评论
请登录后再发表评论!
 
 

 
  
						    
						   上一篇:
上一篇:  下一篇:
下一篇:  文章来自:
文章来自:  引用通告:
引用通告:  Tags:
Tags:  最新日志:
最新日志:
						 
						 
					   
















