我只有保存在item中的特定数据行的id。我正在尝试检索用于插入语句的额外数据,以记录谁在系统上进行了删除。
public static void DeleteFromClass(this Entities context, List<long> ids, string deletedBy)
{
if (ids.Count == 0) return;
foreach (var item in ids)
{
var result = (from details in context.Class
where details.ID == item
select new
{
id = item,
studNumber = details.studNumber,
name = details.name,
lastName = details.lastName,
}).ToList();
var InsertQuery = "INSERT INTO DeletedStudents (studNumber, name, lastName, DeletedBy, DeletedOn, stage) " +
"VALUES (" + result.Where(e => e.id == item).Select(e => e.studNumber) + "," + result.Where(e => e.id == item).Select(e => e.name) + "," + result.Where(e => e.id == item).Select(e => e.lastName) + "," + deletedBy + "," + DateTime.Now + ", 1) ";
}
}
答案 0 :(得分:0)
此代码与您的想法不符。
X
^该代码返回一个表示零个或多个记录的对象。您可能并不打算将其串联为字符串。
如果您想从一条记录中获取一条字符串,则可以执行以下操作:
result.Where(e => e.id == item).Select(e => e.studNumber)
如果您认为可能返回了多个记录,那么也许您只想使用第一个记录:
result.Single(e => e.id == item).studNumber
如果不确定是否有记录,可以执行以下操作:
result.First(e => e.id == item).studNumber
或者如果您想为每个记录插入一条语句:
result.FirstOrDefault(e => e.id == item)?.studNumber ?? ""
话虽如此,您可能should not concatenate strings to form SQL statements。您应该使用带有强类型参数的存储过程。
或者更好的是,不要混合使用EF和SQL。改用EF进行插入。