0

我有一个 api 调用 getUser ,它从数据库中的指定列返回所有信息,但我想排除一些东西;电话号码、电子邮件等

尝试摆弄 LINQ,更改 modelBuilder,更改 optionBuilder

已查找任何 SQL 语句“Select * from”但一无所获

删除我的 UserModel 中的东西确实有效,但这是一种丑陋的做法。

Result<UserModel> result = new Result<UserModel>();
try
    {
        using (var db = new ComeatDBContext(optionsBuilder.Options))
        {
            var user = db.User
                .Include(f => f.Nationality)
                .Include(f => f.State)
                .FirstOrDefault(e => e.Id == id && !e.IsDeleted);

            result.ResponseObject = (new UserModel()).FromUser(user);
            var house = db.House.FirstOrDefault(e => e.UserId == user.Id);
            if (house != null)
            {
                result.ResponseObject.House = ( new HouseModel() ).FromHouse(house);
            }
            result.Success = true;
        }

预期指定要包含(或不包含)哪些数据,但除非我在 DB 将值设置为“null”,否则我会得到所有数据。

4

1 回答 1

1

.FirstOrDefault(...)就是导致执行底层数据库查询 (SQL) 的原因。它将填充在实体上定义的所有属性。然后在您执行时将数据实体转换为您的UserModel对象(new UserModel()).FromUser(user);

如果您想重用您的 UserModel 类但不填充所有列,您可以执行以下操作;

var userModel = db.User
     .Select(x => new UserModel { Name = x.Name, Id = x.Id })
     .FirstOrDefault(e => e.Id == id && !e.IsDeleted);

result.ResponseObject = userModel;
于 2019-08-30T11:36:21.197 回答