不错呦!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 | 查看次数: 3870
发表评论
请登录后再发表评论!