sql和linq转换示例

1.查询

sql:
select id from person where id>1

linq(查询语法):
var data = from person in context.People
            where person.Id > 1
            select new { Id = person.Id };

linq(方法语法):  
var data = context.People.Where(person => person.Id > 1).Select(person => new { Id = person.Id });

2.排序

sql:
select id,name from person order by name asc, id desc

linq(查询语法):
var data = from person in context.People
            orderby person.Name ascending, person.Id descending
            select person;

linq(方法语法):
var data = context.People.OrderBy(person => person.Name).ThenByDescending(person => person.Id);

3.分组

sql:
select name from person group by name,age having count(*)>=1 order by count(*) desc

linq(查询语法):
var data = from person in context.People
            group person by new { person.Name, person.Age } into g
            where g.Count() >= 1
            orderby g.Count() descending
            select g.Key;

linq(方法语法):
var data = context.People.GroupBy(person => new { person.Name, person.Age }).Where(g => g.Count() >= 1).OrderByDescending(g => g.Count()).Select(g => g.Key);

4.连接

sql:
select a.name,b.name from person a inner join pet b on a.id=b.pid

linq(查询语法):
var data = from person in context.People
            join pet in context.Pets on person.Id equals pet.Pid
            select new { Name1 = person.Name, Name2 = pet.Name };
//or
var data = from person in context.People
            let pets = person.Pets
            from pet in pets
            select new { Name1 = person.Name, Name2 = pet.Name };

linq(方法语法):
var data = context.People.Join(context.Pets, person => person.Id, pet => pet.Pid, (person, pet) => new { Name1 = person.Name, Name2 = pet.Name });
//or
var data = context.People.SelectMany(person => person.Pets, (person, pet) => new { Name1 = person.Name, Name2 = pet.Name });

5.左连接

sql:
select a.name,isnull(b.name,'-') from person a left join pet b on a.id=b.pid

linq(查询语法):
var data = from person in context.People
            join pet in context.Pets on person.Id equals pet.Pid into pets
            from item in pets.DefaultIfEmpty()
            select new { Name1 = person.Name, Name2 = item == null ? "-" : item.Name };

linq(方法语法):
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 { Name1 = item.person.Name, Name2 = pet == null ? "-" : pet.Name });


评论: 0 | 引用: 0 | 查看次数: 3342
发表评论
登录后再发表评论!