c# MongoDB Delete(string id) 函数的 Repo 引用不接受传递的字符串 DAO 参数

c# MongoDB Repo reference for Delete(string id) function won't accept being passed string DAO parameter

我正在尝试在 DAL EmployeeDAO 中创建删除函数,如下所示:

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 Error CS1061 'string' does not contain a definition for 'GetIdAsString' and >no extension method 'GetIdAsString' accepting a first argument of type 'string' >could be found

它引用的存储库 (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 函数来完成。

所以首先,您在这里引用 GetIsAsString() 就好像它是一个扩展方法一样:

repo.Delete(Id.GetIdAsString());

如果你想让它成为一个扩展方法,它应该看起来像这样(在静态 class 中)

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

否则,如果它与您的 ID class 相同 属性:

,则引用它
repo.Delete(GetIdAsString());

但老实说,我不明白 GetIdAsString() 方法的用途。

正在调用已经是字符串变量的 Id 参数。

所以这应该有效

repo.Delete(Id);

另外,我想你会想在这里引用 _id,你也不应该将它转换为 ObjectId

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

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

并且在 Delete<HelpdeskEntity>(string id) 中,参数 id 已经是一个 string,所以使用 GetIdAsString() 方法对我来说毫无意义。只需使用 repo.Delete(Id).