Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从Table类型的对象中删除元素?_C#_Linq - Fatal编程技术网

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

C# 如何从Table类型的对象中删除元素?,c#,linq,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 exis

我的代码是

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.files是一个表,其中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表集合中的一个对象,并且不像DataRow那样具有Delete方法

您可能想要的是:

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

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

PD.files的类型是什么?其中AssetFile由“[Table Name=files]公共类AssetFile{public AssetFile{}[ColumnIsPrimaryKey=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;}“链接的问题是关于DataTable而不是Table。我如何在Table上做等价的事情呢?也许?我不想从数据库中删除它。在这种情况下,你应该说你到底想做什么。如果您想创建一个不同于数据库模型的视图,您可能应该使用ObservableCollection或IEnumerable。这些应该足够容易过滤,以满足您的视图需求。