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。这些应该足够容易过滤,以满足您的视图需求。