我一直在思考这个问题。是否有一种简单的方法可以使用结果查询数据库两次而不将查询结果存储在某个变量中?说我有一个
string ResearchAdmin;
我希望将' FirstName'和'姓氏'发现在项目研究员的2个不同栏目中。数据库中的表。我可以只查询一次数据库(使用说实体框架),并获取两列而不存储整个表的数据。
为了说明我的观点,在执行下面的代码时,我会认为查询数据库两次,一次获得“FirstName”,一次获得“#姓”'
ResearchAdmin = db.ProjectResearcher.FirstOrDefault(r => r.ProjectId == project.ProjectId).Researcher.FirstName + " " + db.ProjectResearcher.FirstOrDefault(r => r.ProjectId == project.ProjectId).Researcher.Surname
要在我执行以下操作后运行查询:
Researcher researchAdmin = db.ProjectResearcher.FirstOrDefault(r => r.ProjectId == project.ProjectId).Researcher;
String researchAdminName = researchAdmin.FirstName + " " + researchAdmin.Surname;
我想知道的是,如果我可以在不查询数据库两次的情况下以某种方式执行第一个选项。
答案 0 :(得分:2)
你可以这样做:
String researchAdminName = db.ProjectResearcher.Where(r => r.ProjectId == project.ProjectId)
.Select(r => r.FirstName + " " + r.Surname).FirstOrDefault();
只需要小心一点,无论你将什么放入select语句都由linq支持实体,但简单的字符串连接是。
答案 1 :(得分:1)
Thewads的答案看起来是正确的,它会给你你需要的东西。
替代方案: 在存储过程中包装逻辑(这里肯定是一种过度杀伤),但对于更复杂的操作它的概率。更好,因为SQL服务器将有一个缓存计划,并且会更快。