我对Linq和Dapper相对较新,我正试图找到最有效的插入方式。我有一个列表对象,如下所示:
public class Programs
{
public int Id { get;set; }
public int Desc { get;set; }
}
列表对象从页面上的字符串字段填充,该字段通常包含Id的字符串(例如234,342,345,398)。现在在数据库234中,342,345已经存在,因此我真正需要插入的唯一一个是398以及记录Id。我已经有了一个存在的方法,可以获取数据库中当前存在的程序ID。我是否先获取程序ID,然后在执行insert语句之前比较两个列表?我可以使用Linq进行比较吗?还有更好的方法吗?
获取程序ID的方法如下所示:
public static List<Programs> GetPrograms(int id)
{
var sql = new StringBuilder();
sql.Append("select Id, Desc from dbo.Programs where Id = @id");
return con.Query<Programs>(sql.ToString(), new { Id = id }, commandType: CommandType.Text).ToList();
}
答案 0 :(得分:1)
在做了一些查看所有选项后,似乎我的情况的一些选项是执行以下操作之一:
由于我的目标是使用Linq和Dapper完成此任务,我选择了第一个选项。这是我为获得我需要的值而做出的linq声明:
save.ProgramList = hiddenFieldProgramIds.Value.Split(',')
.Select(n => new Programs(){ id = int.Parse(n) })
.Where(n => !program.ProgramList.Select(d => d.id).Contains(n.id)).ToList();
然后,dapper调用只是一个使用基于先前建议的var的直接插入语句。
var sql = @"insert into dbo.programTable(Id) select @id";
con.Execute(sql, new { id = id }, commandType: commandType.Text, commandTimeout: 5000);