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)
.
我正在尝试在 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)
.