如何使用Linq2Sql模拟“In”

时间:2010-04-14 20:31:41

标签: c# linq-to-sql

我经常发现自己有一个断开连接的Linq2Sql对象或密钥列表,我需要从Linq2Sql数据上下文中重新选择以在数据库中更新或删除。如果这是SQL,我会在SQL IN子句中使用WHERE,但我仍然坚持在Linq2Sql中做什么。以下是我想写的内容示例:

public void MarkValidated(IList<int> idsToValidate)
{
    using(_Db.NewSession()) // Instatiates new DataContext
    {
        // ThatAreIn <- this is where I am stuck
        var items = _Db.Items.ThatAreIn(idsToValidate).ToList();
        foreach(var item in items)
            item.Validated = DateTime.Now;
        _Db.SubmitChanges();
    } // Disposes of DataContext
}

或者:

public void DeleteItems(IList<int> idsToDelete)
{
    using(_Db.NewSession()) // Instatiates new DataContext
    {
        // ThatAreIn <- this is where I am stuck
        var items = _Db.Items.ThatAreIn(idsToValidate);
        _Db.Items.DeleteAllOnSubmit(items);
        _Db.SubmitChanges();
    } // Disposes of DataContext
}

我可以在一次数据库中完成这项工作吗?如果是这样,怎么样?是否可以将所有这些int作为参数列表发送到数据库,并且比在列表上执行foreach以便一次选择一个项目更有效?

1 个答案:

答案 0 :(得分:3)

你能做到:

var items = _Db.Items.Where(i => idsToValidate.Contains(i.Key));

这会起作用还是我错过了什么?