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

时间:2015-05-15 20:31:33

标签: c# linq

我的代码是

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()未被编译器识别。奇怪,因为this guy发布了相同的代码,并说它有效。我真正想要什么功能?

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; } 
}

2 个答案:

答案 0 :(得分:0)

您必须使用DeleteOnSubmit方法。 在你的情况下

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

有关详细信息,请参阅this link

答案 1 :(得分:0)

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

你可能想要的是:

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

...所以你最终会得到一个列表,其中有orgid个不同的文件被删除&#34; (实际上:未添加)。