怎样用LINQ to SQL选择列

kouyao 2010-10-01 05:08:02
我想在一个方法中用LINQ to SQL选择数据表中的某些列,不知道怎样写。
我知道可以在Page_Load事件处理程序中这样写:
protected void Page_Load()
{
MyDataContext context = new MyDataContext();
var q = context.Blogs.Select(m => new { m.ID, m.Title });
GridView1.DataSource = q;
GridView1.DataBind();
}
但这样就把Data Access和UI混在一起了,不好。
如果在一个方法中选择整个数据表中的所有列,可以这样写:
public IEnumerable<MyTable> Select()
{
return context.MyTables;//返回所有列,所以返回类型可以是IEnumerable<MyTable>
//MyTable是一个数据表名称,Object Relational Designer会自动创建一个代表它的类,名称也是MyTable
}
如果我只想返回某些列,如return context.MyTable.Where(m=>new{m.ID,m.Title});那么此时返回类型应该是什么?(已经不能是IEnumerable<MyTable>了)
...全文
204 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kouyao 2010-10-02
  • 打赏
  • 举报
回复
4楼和6楼说的都很有用,最后我就新建了一个非匿名类,成功返回了特定的数据列。
owenxin26 2010-10-02
  • 打赏
  • 举报
回复
回楼主:

严谨的来讲,对于自定义返回类型的查询,最好是新建一个对应类。

class MyTableSingleColumn { public int Id {get;set;} public string Title {get;set;}


然后查询数据库的方法这样:

public IQueryable<MyTableSingleColumn> SelectSingleColumn() {
return context.Select(m => new MyTableSingleColumn { Id = m.Id, Title = m.Title };
}


IQueryable和IEnumberable的区别是:

IEnumberable会在调用方法的时候直接对数据库进行查询,IQueryable则是只有用到数据的情况下才会进行查询。

一般情况下用LINQ写数据库查询类的时候尽量用IQueryable,这样可以有效降低服务器查询次数,方便查询拼接。
写出类似这样的语句: var data = dbAccess.FindRecordByTitle("mytitle").SelectSingleColumn();
只需要查询一次数据库。
kouyao 2010-10-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 q107770540 的回复:]
public List<MyTable> Select()
{
MyDataContext context = new MyDataContext();
var q = from b in context.Blogs
select new MyTable
{
ID= m.ID,
Title=m.Title
};
return q.ToList(……
[/Quote]
你的回复让我眼前一亮,我这样写Select方法:

public List<Blog> Select()
{
BlogRepresentationDataContext context = new BlogRepresentationDataContext();
var q = from m in context.Blogs
select new Blog
{
ID = m.ID,
Title = m.Title
};
return q.ToList<Blog>(); //此行出错
}

但是运行时出错了:Explicit construction of entity type 'Blog' in query is not allowed。
出错的行是return q.ToList<Blog>();
q107770540 2010-10-01
  • 打赏
  • 举报
回复
public List<MyTable> Select()
{
MyDataContext context = new MyDataContext();
var q = from b in context.Blogs
select new MyTable
{
ID= m.ID,
Title=m.Title
};
return q.ToList();
}
qq100191677 2010-10-01
  • 打赏
  • 举报
回复
忘了啊
wuyq11 2010-10-01
  • 打赏
  • 举报
回复
select p.ID,p.Name,一个表的多个字段;
指定一个匿名对象:
select new
{
Name=p.Name
};
制定类型
select new Name
{
Name=p.Name
};

}
kouyao 2010-10-01
  • 打赏
  • 举报
回复
我说的是在一个组件中用方法写好Data Access,在页面中用一个Object Data Source呈现

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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