Jad*_*ias 13 .net c# linq linq-to-sql
我需要更新值,但我循环所有表值来做到这一点:
public static void Update(IEnumerable<Sample> samples
, DataClassesDataContext db)
{
foreach (var sample in db.Samples)
{
var matches = samples.Where(a => a.Id == sample.Id);
if(matches.Any())
{
var match = matches.First();
match.SomeColumn = sample.SomeColumn;
}
}
db.SubmitChanges();
}
Run Code Online (Sandbox Code Playgroud)
我确信上面的代码不是正确的方法,但我还没想到其他任何方式.你能表现出更好的方式吗?
Jac*_*itt 24
是的,有一种更简单的方法.更简单.如果将实体附加到上下文然后刷新(选择了KeepCurrentValues),Linq to SQL将从服务器获取这些实体,比较它们,并标记更新的不同实体.你的代码看起来像这样.
public static void Update(IEnumerable<Sample> samples
, DataClassesDataContext db)
{
db.Samples.AttachAll(samples);
db.Refresh(RefreshMode.KeepCurrentValues, samples)
db.SubmitChanges();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Linq to SQL使用密钥来匹配和更新记录,因此只要您的密钥同步,您就可以了.
使用Linq2Sql(或Linq to Entities),没有办法*更新服务器上的记录而不先完全检索它们,所以你所做的实际上是正确的.
如果要避免这种情况,请编写执行所需操作的存储过程并将其添加到模型中.
我不完全确定这是不是你想要的问题:)
*:有一些hacks使用LINQ来构建一个SELECT语句并将生成的SELECT语句以某种方式进入UPDATE,但我不推荐它.
| 归档时间: |
|
| 查看次数: |
18838 次 |
| 最近记录: |