【发布时间】: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