代码之家  ›  专栏  ›  技术社区  ›  flipdoubt

如何使用Linq2Sql模拟“In”

  •  3
  • flipdoubt  · 技术社区  · 16 年前

    我经常发现自己有一个断开连接的Linq2Sql对象或键的列表,需要从Linq2Sql数据上下文中重新选择这些对象或键,以便在数据库中更新或删除它们。如果这是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 回复  |  直到 16 年前
        1
  •  3
  •   Brian Mains    16 年前

    你能做到:

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

    这样行吗?还是我遗漏了什么?