读书人

Linq怎么只查表中的部分字段给实体呢

发布时间: 2012-01-07 21:41:55 作者: rapoo

Linq如何只查表中的部分字段给实体呢?
如实体定义如下
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
public string Rating { get; set; }
}

表结构有ID,Title,ReleaseDate,Genre,Price和Rating这几个字段
考虑性能(有可能某个字段数据特别大,我不想查出来),我现在想只查ID、Title和Price这三个字段

var movies = from m in db.Movies
where m.ReleaseDate > new DateTime(1984, 6, 1)
select new {ID=m.ID, Title=m.Title, Price=m.Price};

List<Movie> movie=movies.ToList(); //这句报错,如何解决?

[解决办法]
select new {ID=m.ID, Title=m.Title, Price=m.Price}这个出来后是匿名类型
改成这样

C# code
select new Movie{ID=m.ID,……其它字段}
[解决办法]
var movies = from m in db.Movies
where m.ReleaseDate > new DateTime(1984, 6, 1)
select new Movie{ID=m.ID, Title=m.Title, Price=m.Price};

这点用到了C#的对象初始化器

[解决办法]
你可以先 匿名出来ToList,再 select 转换,就跟LINQ to Entities 就没关系了 。
C# code
var movies = from m in db.Movies             where m.ReleaseDate > new DateTime(1984, 6, 1)             select new {ID=m.ID, Title=m.Title, Price=m.Price};List<Movie> movie=movies.ToList()                        .Select(m=>new Movie{ID=m.ID, Title=m.Title,Price=m.Price}).ToList();
[解决办法]
不想查出来的字段直接给设置为空不就完了么。
C# code
var movies = from m in db.Movies  where m.ReleaseDate > new DateTime(1984, 6, 1)  select new Movie(){ID=m.ID, Title=m.Title, Price=m.Price,ReleaseDate=null,Genre="",Rating=""};
[解决办法]
坐等答案

读书人网 >.NET

热点推荐