使用 LINQ 从选择中排除列
Posted
技术标签:
【中文标题】使用 LINQ 从选择中排除列【英文标题】:Exclude a column from a select using LINQ 【发布时间】:2013-10-19 06:23:33 【问题描述】:我正在使用实体框架代码优先开发 WCF RESTful Web 服务。
我有一张表Users
有很多列。我这样做是为了获取特定用户:
context.Configuration.ProxyCreationEnabled = false;
var users = from u in context.Users
where u.UserId == userId
select u;
在这个表上,有一个密码列,我不想返回这个列。
如何从该选择中排除密码列?
【问题讨论】:
LINQ to SQL - How to select specific columns and return strongly typed list 的可能重复项 顺便说一句,恕我直言,这是一个糟糕的设计。你永远不应该将你的实体暴露给你的 UI、Web 服务等。你应该有一个 DTO(数据传输对象),它基本上是一个 POCO,只有你想要公开的那些字段。 【参考方案1】:说起来很难过,但是不
您无法选择直接排除任何特定列。您可以使用延迟加载列。
最简单且不受欢迎的方法是包含您想要的列。
【讨论】:
【参考方案2】:这样的另一种方式,
var users = from u in context.Users
where u.UserId == userId
select new
col1 = u.UserId,
col2 = u.Watever
.ToList();
【讨论】:
【参考方案3】:在你的选择语句中指定你想要的每一列:
var users = from u in context.Users
where u.UserId == userId
select u.UserId, u.Watever, etc... ;
【讨论】:
这个语法给了我一个编译时错误“;
expected”。您的意思是对匿名类型使用 new u.UserId, u.Whatever, ...
语法吗?
不,您只是忘记了末尾的分号或打错了字。当然,您不会键入“等”。在我的示例中显示。在列出的最后一列之后,去掉逗号并以分号结束... select u.UserId, u.AnotherColumn, u.LastColumn;
编译器拒绝您输入的方式。 Here 是如何选择多列。我正在更新你的答案。【参考方案4】:
您可以为每个表创建多个 LINQ 对象。我会创建一个包含您需要的字段和一个没有的字段。但它使 CRUD 操作更加困难。
【讨论】:
以上是关于使用 LINQ 从选择中排除列的主要内容,如果未能解决你的问题,请参考以下文章
用于从实体类及其导航属性中选择多个列的 Linq Lambda 表达式
是否可以在选择完成之前设置列别名,使用 Linq to SQL