如何从表类型的对象中删除元素?

本文关键字:删除 元素 对象 类型 | 更新日期: 2023-09-27 17:49:14

代码为

if (selectedOrgName != "All")
{
    // Get the orgid corresponding to the selected organization
    var selectedOrgId = PD.orgs.FirstOrDefault(o => o.orgname == selectedOrgName); 
    // Return error message if no such oranization name exists
    if (selectedOrgId == null) 
    {
        return Content("Couldn't find row for organization '" + selectedOrgName + 
        "' in the database."); 
    }
    foreach (var f in PD.files) if (f.orgid != selectedOrgId.orgid) f.Delete();
} // if search is filtered by a specific organization

除了Delete()不能被编译器识别。奇怪的是,这个人发布了相同的代码,并说它有效。我真正想要的函数是什么?

PD.filesTable<AssetFile>,其中AssetFile定义为

[Table( Name = "files" )] 
public class AssetFile 
{ 
    public AssetFile() { } 
    [Column(IsPrimaryKey = true, IsDbGenerated = true)]         
    public int fileid { get; set; } 
    [Column] 
    public int orgid { get; set; } 
    [Column] 
    public int catid { get; set; } 
    [Column]
    public string filename { get; set; } 
}

如何从表类型的对象中删除元素?

必须使用DeleteOnSubmit方法。

foreach (var f in PD.files)
{
    if (f.orgid != selectedOrgId.orgid)
    {
        PD.files.DeleteOnSubmit(f);
    }
}
PD.SubmitChanges();

好吧,AssetFile不是DataTable中的DataRow。它只是一个集合中的对象(LINQ-to-SQL Table<T>),它不像DataRow那样有Delete方法。

你可能想要的是:

 var files =  PD.files
                .Where(f => f.orgid == selectedOrgId.orgid)
                .ToList();

…因此,您最终得到一个列表,其中具有不同orgid的文件被"删除"(实际上:未添加)。