如何从此列表中检索列数据
Posted
技术标签:
【中文标题】如何从此列表中检索列数据【英文标题】:How do i retrieve column data from this list 【发布时间】:2019-08-30 08:03:20 【问题描述】:我只有保存在项目中的特定数据行的 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) ";
【问题讨论】:
我不明白您在问什么,因为您已经在从结果集中访问属性。你到底是哪里出了问题?见How to Ask。 Var 结果包含我需要访问的属性,但是通过我插入的值,我的结果返回空白。我不知道出了什么问题。除了Linq,就没有更简单的方法了吗? 【参考方案1】:这段代码并不像你想的那样。
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 ?? ""
或者,如果您想为每条记录添加一个插入语句:
string[] sql = result.Select( e => "INSERT blah blah VALUES (" + e.studNumber + ").ToArray();
说了这么多,你可能是should not concatenate strings to form SQL statements。您应该使用带有强类型参数的存储过程。
或者更好的是,不要混合和匹配 EF 和 SQL。改为使用 EF 进行插入。
【讨论】:
太棒了!谢谢@约翰。我会记住这一点以供将来参考。以上是关于如何从此列表中检索列数据的主要内容,如果未能解决你的问题,请参考以下文章