使用LINQ删除记录时出错

Kab*_*abi 1 .net c# linq exception-handling linq-to-sql

我尝试将SQL删除命令更改为LINQ.这是我的SQL命令:

DELETE FROM [TrackPoints]
WHERE [RouteFK] IN (SELECT RouteId
                    FROM Routes
                    WHERE UserId = @UserId)
Run Code Online (Sandbox Code Playgroud)

这是我写的LINQ代码:

int UID =1;
FirstDataContext aspnetdb = new FirstDataContext();
var res1 = from q1 in aspnetdb.Routes
           where q1.UserId == UID
           select q1.RouteId;
foreach (var k in res1)
{
    var eigen = from p in aspnetdb.Trackpoints
                where p.RouteFK == k
                select p.TrackPointId;

    aspnetdb.Trackpoints.DeleteOnSubmit(eigen.First());
    aspnetdb.SubmitChanges();
}
Run Code Online (Sandbox Code Playgroud)

但在这一行我有一个错误:

aspnetdb.Trackpoints.DeleteOnSubmit(eigen.First());
Run Code Online (Sandbox Code Playgroud)

那说:

'System.Data.Linq.Table.DeleteOnSubmit(LINQ_Test.Trackpoint)'的最佳重载方法匹配有一些无效的参数

我该怎么办?

aba*_*hev 5

用这个:

var eigen = (from p in aspnetdb.Trackpoints
            where p.RouteFK == k
            select p).First();
Run Code Online (Sandbox Code Playgroud)

或者更短的:

var eigen = aspnetdb.Trackpoints.First(p => p.RouteFK == k);
Run Code Online (Sandbox Code Playgroud)

因为它返回 Trackpoint

虽然你的select p.TrackPointId回报Int.


var r = from r in aspnetdb.Routes
        join p in aspnetdb.Trackpoints on p.RouteId equals r.RouteFK
        where r.UserId == UID
        select p;

foreach (var x in r)
{
    aspnetdb.Trackpoints.DeleteOnSubmit(x);
}
aspnetdb.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)

  • @Kabi:还要注意调用`DeleteAllOnSubmit`以进一步简化代码的选项...... (2认同)