Linq - 按ID从数据库中选择记录

时间:2014-07-02 17:18:48

标签: c# .net linq

我正在尝试使用我指定的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#)方面不是很有经验。提前谢谢。

2 个答案:

答案 0 :(得分:2)

您当前的查询正在返回一个列表。听起来你需要一个记录?为此,请使用:

var recordDesired = db.Departments.FirstOrDefault(d => d.id == id);

假设'id'是在某处定义的int,'id'属性也是int。您是否有机会使用实体框架?如果是这样,我相信'id'属性需要同时拥有公共getter和public setter。我听说您没有将ID暴露给最终客户端应用程序。一种选择是涉及使用DTO(数据传输对象)来翻译数据库喷出的所有优点,并将其包装在一个简单的类中,该类仅公开最终应用程序所关注的属性。

答案 1 :(得分:2)

如果您正在使用实体框架,则无法将getset声明为private,否则实体框架将无法访问它

这是您正在寻找的,以确保外部代码无法设置ID:

public int Id { get; protected internal set; }