【发布时间】:2016-10-14 10:53:54
【问题描述】:
示例输入:
// remove sensitive data
var user = db.Users.Where(x => x.Id == '123').ToList()
.Omit("PasswordHash", "PasswordSalt", "SecretDataAsInteger");
输出:
{
FirstName: "...",
LastName: "...",
PasswordHash: "", // default value instead of real value
PasswordSalt: "",
SeretDataAsInteger: 0
}
类似于: https://lodash.com/docs/4.16.4#omit
偏好:
- 我更喜欢不选择新对象并设置每个属性的解决方案,除了我想省略的属性,即
var user = ..Users.Select(x => new User {/* here I set each property */})
由于这导致更新所有参考,以防我稍后更新User模型属性
- 在省略函数中传递对象而不是属性名称作为字符串也是可以接受的
【问题讨论】:
-
问题到底是什么?
Omit的方法如何实现? -
@JonSkeet 我不认为 omit 方法会修改任何东西,我认为它基本上是“给我所有没有这些指定属性的对象”,对于排除密码字段或我想的敏感数据很有用。跨度>
-
@DavidG:据我所知,这不是省略对象,而是省略属性...所以是的,它仍然可以等同于
Select,但就是这样,而不是Where... -
听起来你基本上想要通过反射复制属性的东西,但省略了某些属性。 stackoverflow.com/questions/1198886 看起来很相关。
-
@hvd:是的,我同意,我误读了那部分。所以 使用 LINQ 是一件合理的事情。一个简短但完整的例子肯定会让这一切变得更清楚,IMO...(将删除评论。)