C# Xamarin表单从sqlite数据库中删除

C# Xamarin表单从sqlite数据库中删除,c#,linq,sqlite,xamarin.forms,C#,Linq,Sqlite,Xamarin.forms,我有一个类公告,我有一个id列表,我正在使用nuget包:sqlite net pcl。 如果我有公告表id,如何从公告表中删除公告。我正在尝试使用linq,如:wait connection.deleteAncy(公告)。Where(…) 但我不能将Where与DeleteAsync一起使用,所以我尝试了 var query = connection.Table<Announcement>().Where(announcement=>announcement.Announce

我有一个类公告,我有一个id列表,我正在使用nuget包:sqlite net pcl。 如果我有公告表id,如何从公告表中删除公告。我正在尝试使用linq,如:wait connection.deleteAncy(公告)。Where(…) 但我不能将Where与DeleteAsync一起使用,所以我尝试了

var query = connection.Table<Announcement>().Where(announcement=>announcement.AnnouncementId == announcementId)
var query=connection.Table().Where(announcement=>announcement.AnnouncementId==AnnouncementId)

它给我这个错误:System.NotSupportedException:无法删除AsyncTableQuery`1:它没有主键

您的ID属性是主键属性吗

[PrimaryKey,AutoIncrement]
public int Id { get; set; }

我从未使用过相关的nuget,但我快速查看了源代码,发现
TableQuery
有一个名为
Delete
的同步方法,该方法返回一个整数


上面包含的代码正在返回一个类型为
TableQuery]的对象。

我想您正在寻找这样的对象:

public static int Delete(string url)
{
    using (var databaseManager = DatabaseManager.Instance)
    {
        lock (databaseManager)
        {
            return databaseManager.Database.Table<File>().Delete(x => x.Url == url);
        }
    }
}
publicstaticint-Delete(字符串url)
{
使用(var-databaseManager=databaseManager.Instance)
{
锁(数据库管理器)
{
返回databaseManager.Database.Table().Delete(x=>x.Url==Url);
}
}
}
这是使用SQLite的


Yes:[PrimaryKey,AutoIncrement]public int AnnouncementId{get;set;}尝试获取FirstOrDefault()值。在您的例子中,查询包含一个项目列表(但是这个列表只包含一个项目)。可能这会解决您的问题我会遇到以下错误:无法将方法组分配给隐式类型的变量,我添加了wait,所以我得到了:Cannot wait'method group'我的FirstOrDefault在哪里?'AsyncTableQuery'不包含'Delete'的定义,并且找不到接受'AsyncTableQuery'类型的第一个参数的扩展方法'Delete'(是否缺少using指令或程序集引用?)TableQuery肯定有一个Delete的定义——请参阅答案中直接取自源代码的代码片段。点击上面的链接。如果您仍然有问题,请添加更多信息,我将查看
connection.Table<Announcement>().Delete(announcement=>announcement.AnnouncementId == announcementId)    
public static int Delete(string url)
{
    using (var databaseManager = DatabaseManager.Instance)
    {
        lock (databaseManager)
        {
            return databaseManager.Database.Table<File>().Delete(x => x.Url == url);
        }
    }
}