Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 删除linqtosql中记录的最干净语法_.net_Linq_Linq To Sql - Fatal编程技术网

.net 删除linqtosql中记录的最干净语法

.net 删除linqtosql中记录的最干净语法,.net,linq,linq-to-sql,.net,Linq,Linq To Sql,当我有主键时,使用LINQ删除数据库记录的最佳方法是什么 您可以将存储过程映射到DataContext上的方法,该方法删除主键具有给定值的记录。我一直使用select delete方法,因为它非常简单。正如marxidad所说,如果您真的愿意,您可以映射存储的进程。我相信ESQL将来会支持插入、更新和删除操作。这种方法是可以接受的,也是典型的 这有点浪费,因为你要的是整张唱片。鉴于DeleteOnSubmit方法签名,这是无法避免的 为什么linqtosql是这样工作的?如果考虑到没有主键或使用

当我有主键时,使用LINQ删除数据库记录的最佳方法是什么

您可以将存储过程映射到DataContext上的方法,该方法删除主键具有给定值的记录。

我一直使用select delete方法,因为它非常简单。正如marxidad所说,如果您真的愿意,您可以映射存储的进程。我相信ESQL将来会支持插入、更新和删除操作。

这种方法是可以接受的,也是典型的

这有点浪费,因为你要的是整张唱片。鉴于DeleteOnSubmit方法签名,这是无法避免的

为什么linqtosql是这样工作的?如果考虑到没有主键或使用复合键的表,答案显而易见。LINQ to SQL在最坏的情况下需要整个记录,其中需要将每个对象属性与表字段相匹配

但是,对于性能的所有问题,我们都应该问一下——您是否绝对确定这对您来说是一个性能问题??你的貌相证据呢


我还没有尝试过这一点,但可能有一种方法可以实现同样的效果。

我最后做了一个选择,但改进了我的语法,我认为这是我真正关心的:

旧的:

var products=从数据库中的p开始。products选择p;

db.Products.deleteoSubmit(Products.Take(1.Single());s、 id==serviceID).FirstOrDefault() 如果将所有列上的更新检查设置为从不或更改时的,则只需使用主键附加一个实例并删除该行而不加载

public void DeleteCustomer(int CustomerID)
{
    NorthwindContext c = new NorthwindContext c;
    Customer target = new Customer(){CustomerID = CustomerID};
    c.Customers.Attach(target);
    c.Customers.DeleteOnSubmit(target);
    c.SubmitChanges();                       
}

LINQ与记录或数据库完全无关。您正在考虑LINQ到SQL。这个问题具有误导性。听起来你担心使用“低效”这个词的性能。是的,我同意,这是一个考虑不周的问题。@上面的评论:阅读问题-“当我有主键时,使用LINQ删除数据库记录的最佳方法是什么?”…这使OP的意思相当明显。Kev,听说过编辑吗?:)评论和问题文本已经过时了。哦,你的意思是语法上低效(即丑陋),而不是实际上低效……这只是一个例子。如果接受多个键和值作为参数,并使用ColumnAttributes进行验证,则应该可以。L2S无法从没有主键的表中删除记录。
Service service = db.Services.Where(s => s.id == serviceID).FirstOrDefault(); <--nicer
db.Services.DeleteOnSubmit(service);
db.SubmitChanges();
  public static Delete(this ITable table, object key)
   { var t = table.GetType();
     var tableName  = t.GetCustomAttributes
                                    (typeof(TableAttribute),false)[0].Name;
     var primaryKey = (from p in t.GetProperties()
                       from c in p.GetCustomAttributes
                                            (typeof(ColumnAttribute),false)
                       where c.IsPrimaryKey
                       select c.Name).Single();
     using (var cmd = table.Context.Connection.CreateCommand())
      { cmd.CommandText = string.Format( "DELETE FROM {0} WHERE {1} = @key"
                                        ,tableName, primaryKey);
        cmd.Parameters.Add(new SqlParameter("@key", key));
        cmd.ExecuteNonQuery();        
      }            
   }

/* ... */
dataContext.Table1.Delete(id);
public void DeleteCustomer(int CustomerID)
{
    NorthwindContext c = new NorthwindContext c;
    Customer target = new Customer(){CustomerID = CustomerID};
    c.Customers.Attach(target);
    c.Customers.DeleteOnSubmit(target);
    c.SubmitChanges();                       
}