【问题标题】:.NET MVC class object for linq.NET MVC 类对象用于 linq
【发布时间】:2020-11-25 04:20:05
【问题描述】:

我有课

public class AClass 
{
     public string AA { get; set; }
     public string AB { get; set; }
}

在 LINQ 中

var x = (from oo in db.AClass 
         select new AClass() { AA = oo.AA, BB = oo.BB }).ToList();

问题:AA 是否只能在 LINQ 启动时访问?之后我希望它是私有的?所以 API 调用或其他开发者不会访问该字段。

如果在LINQ中没有应用这个类,我可以将AA放入构造函数中。不幸的是,LINQ 不支持带参数的构造函数。

所以我想知道是否有任何技巧可以实现它?

谢谢。

【问题讨论】:

  • 无法使用初始化列表初始化私有属性。使用带有 init 关键字的 C# 9,您可以初始化只读的公共属性。如果您希望它是私有的,请使用构造函数。
  • 我不能使用构造函数,因为该类应用于 LINQ,如果我使用带参数的构造函数,它会抛出错误“LINQ to Entities 仅支持无参数构造函数和初始化程序”
  • 执行以下操作有一些缺点(即不完全懒惰),但您可以在db.AClass 上调用ToList,这将为您提供正常的Linq 操作。
  • @Hayden,我正在使用原始 linq 而不是调用诸如 .Where 或 .FirstOfDefault 之类的函数,因为需要从多个关联表中获取少量值。我必须在 ToList() 之前先选择对象,否则我需要将类初始化和查询选择分开或分配两次属性的值。

标签: c# asp.net-mvc linq


【解决方案1】:

问题:AA 是否只能在 LINQ 启动时访问?之后我希望它是私有的?所以 API 调用或其他开发者不会访问该字段。

设计(非网络)API 与普通的窗口、服务、网络或移动编程完全不同。我们的想法是不使用任何可以在客户端更改的数据类型。

List<T> 为例,最终用户可以添加、删除等。最好使用IEnumerable<T>

这样它对其他开发者是私有的,并且作为 API 调用响应不能被篡改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2020-11-06
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多