我正在尝试在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 错误CS1061'字符串'不包含'GetIdAsString'的定义和>没有扩展方法'GetIdAsString'接受类型'string'>的第一个参数可以找到
它引用的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是string类型。
有任何想法或更好的方法来实现这一目标吗?由于将来依赖于存储库方法的项目要求,我无法使用Insert / async / await创建方法,因此必须使用repo.Delete
函数来完成。
答案 0 :(得分:0)
首先,您正在引用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);
答案 1 :(得分:0)
请问您在哪里定义GetIdAsString()
方法? Id
中的Delete(string Id)
已经是string
,string
类没有扩展方法GetIdAsString()
,因此会发生错误。
在Delete<HelpdeskEntity>(string id)
中,参数id
已经是string
,因此使用GetIdAsString()
方法对我没有意义。只需使用repo.Delete(Id)
。