【问题标题】:How do I simulate "In" using Linq2Sql如何使用 Linq2Sql 模拟“In”
【发布时间】:2010-04-15 04:39:48
【问题描述】:

我经常发现自己有一个断开连接的 Linq2Sql 对象或键的列表,我需要从 Linq2Sql 数据上下文中重新选择它们以在数据库中更新或删除。如果这是 SQL,我会在 SQL WHERE 子句中使用 IN,但我无法在 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
}

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

【问题讨论】:

    标签: c# linq-to-sql


    【解决方案1】:

    你能做到吗:

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

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

    【讨论】:

    • 我知道。
    猜你喜欢
    • 2012-07-30
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 2012-01-09
    • 2012-05-19
    • 1970-01-01
    相关资源
    最近更新 更多