我使用实体框架5.0与.net framework 4.0代码的第一种方法.现在我知道我可以通过以下方式在实体框架中运行原始sql
var students = Context.Database.SqlQuery<Student>("select * from student").ToList();
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但我想要的是返回匿名结果.例如,我只想要学生表中的特定列,如下所示
var students = Context.Database.SqlQuery<Student>("select FirstName from student").ToList();
Run Code Online (Sandbox Code Playgroud)
它不起作用.它给了例外
数据读取器与指定的"MyApp.DataContext.Student"不兼容.类型为"StudentId"的成员在数据读取器中没有具有相同名称的相应列.
所以我尝试过dynamic
类型
var students = Context.Database.SqlQuery<dynamic>("select FirstName from student").ToList();
Run Code Online (Sandbox Code Playgroud)
它也不起作用,它返回一个空对象.没有数据可用.
有没有办法从动态SQL查询中获取匿名类型结果?
SQL Server 使用“inserted”关键字提供插入和更新记录的输出。
我有一个代表处理队列的表。我使用以下查询来锁定记录并获取锁定记录的 ID:
UPDATE TOP (1) GlobalTrans
SET LockDateTime = GETUTCDATE()
OUTPUT inserted.ID
WHERE LockDateTime IS NULL
Run Code Online (Sandbox Code Playgroud)
这将输出一个名为 ID 的列,其中包含所有更新的记录 ID(在我的例子中为单个 ID)。如何将其转换为 C# 中的 EF 来执行更新并取回 ID?