Linq如何只查表中的部分字段给实体呢?

gxingmin 2011-05-31 03:43:43
如实体定义如下
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(); //这句报错,如何解决?
...全文
927 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
天涯独行 2011-06-01
  • 打赏
  • 举报
回复
坐等答案
gxingmin 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 claymore1114 的回复:]
你可以先 匿名出来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, Ti……
[/Quote]

这个应该可以
gxingmin 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 kingdom_0 的回复:]
不想查出来的字段直接给设置为空不就完了么。

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,Genr……
[/Quote]

不行,还是那个提示
在 LINQ to Entities 查询中无法构造实体或复杂类型“MvcMovie.Models.Movie”。
kingdom_0 2011-05-31
  • 打赏
  • 举报
回复
不想查出来的字段直接给设置为空不就完了么。

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


试试.
claymore1114 2011-05-31
  • 打赏
  • 举报
回复
你可以先 匿名出来ToList,再 select 转换,就跟LINQ to Entities 就没关系了 。

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();
gxingmin 2011-05-31
  • 打赏
  • 举报
回复
谢谢,你这两个连接我都看了,好像没有解决根本性的问题
另外,重新再定一个实体类(只包含ID、Title和Price属性),但是这个似乎也不妥,要是我查询其他任意组合的字段岂不定义n多个实体类?

我想最好的解决方法是还是只有一个实体类,其他字段为默认的空值就最好了
q107770540 2011-05-31
  • 打赏
  • 举报
回复
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#的对象初始化器
gxingmin 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bclz_vs 的回复:]
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};
[/Quote]

不行,还是报下面这个错

在 LINQ to Entities 查询中无法构造实体或复杂类型“MvcMovie.Models.Movie”。
边城的刀声 2011-05-31
  • 打赏
  • 举报
回复

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};
边城的刀声 2011-05-31
  • 打赏
  • 举报
回复
select new {ID=m.ID, Title=m.Title, Price=m.Price}这个出来后是匿名类型
改成这样

select new Movie{ID=m.ID,……其它字段}

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧