我正在尝试使用我指定的ID从数据库中获取记录。但是我在创建正确的Linq查询时遇到了困难 首先,这是我尝试过的两件事,但似乎没有用。
var query_result = from d in db.Departments
where d.id == id
select d;
在这里,我尝试选择遵循我给定id的部门。但是,在我的Department
课程中,id
属性是私有的。我希望保持这种方式,符合正常的OOP。
在此之前我尝试这样做:
var query_result = from d in db.Departments
where d.getId() == id
select d;
在这种情况下,我使用getter作为id,但这给了我以下错误:
方法'Int32 getId()'没有支持的SQL转换。
我试过四处寻找,但我似乎无法找到一个确凿的答案,在我看来,这应该很简单。我确实看到很多示例直接访问类属性,但这意味着将它们公之于众。除非我遗漏了一些东西,否则我不会那么想。
我在Linq(或c#)方面不是很有经验。提前谢谢。
答案 0 :(得分:2)
您当前的查询正在返回一个列表。听起来你需要一个记录?为此,请使用:
var recordDesired = db.Departments.FirstOrDefault(d => d.id == id);
假设'id'是在某处定义的int,'id'属性也是int。您是否有机会使用实体框架?如果是这样,我相信'id'属性需要同时拥有公共getter和public setter。我听说您没有将ID暴露给最终客户端应用程序。一种选择是涉及使用DTO(数据传输对象)来翻译数据库喷出的所有优点,并将其包装在一个简单的类中,该类仅公开最终应用程序所关注的属性。
答案 1 :(得分:2)
如果您正在使用实体框架,则无法将get
或set
声明为private
,否则实体框架将无法访问它
这是您正在寻找的,以确保外部代码无法设置ID:
public int Id { get; protected internal set; }