日期:2014-05-20  浏览次数:20960 次

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=""};

------解决方案--------------------
坐等答案