我的代码是
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.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; }
}
答案 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; (实际上:未添加)。