代码为
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
为Table<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
的文件被"删除"(实际上:未添加)。