c#MongoDB Repo对Delete(string id)函数的引用赢得';t接受正在传递的字符串DAO参数

本文关键字:DAO 参数 字符串 string Delete Repo id c#MongoDB 引用 函数 | 更新日期: 2023-09-27 18:13:28

我正试图在DAL EmployeeDAO中创建一个Delete函数,如下所示:

public long Delete(string Id)
    {
        HelpdeskRepository repo = new HelpdeskRepository(new DbContext());
        long deleteFlag = 0;
        if (Id.Count() > 0)
        {
            repo.Delete(Id.GetIdAsString());
            deleteFlag = 1;
            return deleteFlag;// if found count = 1 == true
        }
        else
        {
            return deleteFlag;
        }
    }

然而,repo.Delete(Id.GetIdAsString());不起作用,给了我错误

Cs1061错误CS1061"string"不包含"GetIdAsString"的定义,并且>找不到接受类型为"string">的第一个参数的扩展方法"GetIdAsString">

因此,它所引用的Repository(repo(函数是:

public long Delete<HelpdeskEntity>(string id)
    {
        var filter = new FilterDefinitionBuilder<HelpdeskEntity>().Eq("Id", new ObjectId(id));
        var collection = GetCollection<HelpdeskEntity>();
        var deleteRes = collection.DeleteOne(filter);
        return deleteRes.DeletedCount;
    }

和GetIdAsString((函数:

public string GetIdAsString()
    {
        return this.Id.ToString();
    }

我不明白为什么Id参数在repo.Delete调用中也不起作用,因为Delete接受字符串参数,Id的类型是字符串。

有什么想法,或者更好的方法来实现这一点吗?由于未来的项目需求依赖于存储库方法,我无法使用Insert/async/await创建方法,因此必须使用repo.Delete函数来完成。

c#MongoDB Repo对Delete(string id)函数的引用赢得';t接受正在传递的字符串DAO参数

请问您在哪里定义GetIdAsString()方法?Delete(string Id)中的Id已经是string,而string类没有扩展方法GetIdAsString(),因此会发生错误。

Delete<HelpdeskEntity>(string id)中,参数id已经是string,所以使用GetIdAsString()方法对我来说没有意义。只需使用repo.Delete(Id)即可。

因此,首先,您引用GetIsAsString((,就好像它是一个扩展方法一样:

repo.Delete(Id.GetIdAsString());

如果你希望它是一个扩展方法,它应该看起来像这样(在静态类中(

public static string GetIdAsString(this ObjectId id)
{
    return id.ToString();
}

否则,如果它与您的Id属性在同一个类中,请这样引用它:

repo.Delete(GetIdAsString());

但老实说,我不理解GetIdAsString((方法的用途。

它是在Id参数上调用的,该参数已经是一个字符串变量。

所以这应该工作

repo.Delete(Id);

此外,我认为您将希望在这里引用_id,并且不需要将其强制转换为ObjectId或

var filter = new FilterDefinitionBuilder<HelpdeskEntity>().Eq("_id", id);