2015-05-15 23 views
0

我的代码是如何从类型为Table的对象中删除元素?

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

什么是PD.files类型? –

+0

'表'其中'AssetFile'由'[表(名称= “文件”)] 公共类AssetFile { 公共AssetFile() { } [柱(IsPrimaryKey =真,IsDbGenerated =定义true)] public int fileid {get;组; } [专栏] public int orgid {get;组; } [专栏] public int catid {get;组; } [Column] public string filename {get;组; } } ' – user4905335

+1

链接的问题是关于DataTable而不是表。 –

回答

0

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

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

详情请参阅this link

+0

我不想从数据库中实际删除它 – user4905335

+0

在这种情况下,您应该说明您确实想要做什么。如果你想创建一个不同于数据库模型的视图,你应该使用'ObservableCollection'或'IEnumerable'作为例子。这些应该很容易过滤以适应您的需求。 – Sami

0

那么,AssetFile不是DataTable中的DataRow。它只是一个集合中的一个对象(LINQ到SQL Table<T>),它没有Delete方法,因为DataRow具有。

你可能想要的是这样的:

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

...所以你最终从具有不同orgid文件被“删除”的列表(实际上:不添加)。