Fir*_*com -1 c# linq asp.net-mvc
所以我有一个控制器正在实现搜索数据库中的文件.用户可以选择按两个字段"组织"和"类别"过滤搜索,也可以将这些下拉菜单保留为"全部".
我有3个表可以使用:
(1)
orgs
---------------------
orgid | orgname
Run Code Online (Sandbox Code Playgroud)
(2)
cats
---------------------
orgid | orgname
Run Code Online (Sandbox Code Playgroud)
(3)
files
------------------------------------------
fileid | orgid | catid | filename
Run Code Online (Sandbox Code Playgroud)
并且文件名是他们正在搜索的内容.为了缩小结果范围,我正在使用files数据库的镜像并从中删除行:
[HttpPost]
public ActionResult AssetSearch (string selectedOrgName, string selectedCatName, string searchVal)
{
PortalData PD = new PortalData();
if (selectedOrgName != "All")
{
var selectedOrgId = PD.orgs.FirstOrDefault(o => o.orgname == selectedOrgName); // Get the orgid corresponding to the selected organization
if (selectedOrgId == null) return Content("Couldn't find row for organization '" + selectedOrgName + "' in the database."); // Return error message if no such oranization name exists
(from thisfile in PD.orgs where thisfile.orgid != selectedOrgId select thisfile).Delete(); // Delete all rows that don't have an orgid corresponding to the selected organization
} // if search is filtered by a specific organization
if (selectedCatName != "All")
{
var selectedCatId = PD.cats.FirstOrDefault(c => c.catname == selectedCatName); // Get the catid corresponding to the selected category
if (selectedCatId == null) return Content("Couldn't find row for category '" + selectedCatName + "' in the database."); // Return error message if no such organization name exists
(from thisfile in PD.orgs where thisfile != selectedCatId select thisfile).Delete();
} // if search is filtered by a specfic category
Run Code Online (Sandbox Code Playgroud)
我的第一个问题与我在标题中提到的错误有关.错误指向
thisfile.orgid != selectedOrgId
Run Code Online (Sandbox Code Playgroud)
和
thisfile.orgid != selectedCatId
Run Code Online (Sandbox Code Playgroud)
我不确定为什么它不喜欢那些表达式,考虑到orgidSQL数据库中的ints 是s,因此应该是返回的值PD.orgs.FirstOrDefault(o => o.orgname == selectedOrgName).
我的下一个问题是如何使凌乱的代码更加紧凑,高效,可读和可靠.
(我是C#/ LINQ /等的n00b,所以对我来说很容易!)
var selectedOrgId = PD.orgs.FirstOrDefault(o => o.orgname == selectedOrgName);
Run Code Online (Sandbox Code Playgroud)
将是实体类型"组织",而不是它的id,与之相同
var selectedCatId = PD.cats.FirstOrDefault(c => c.catname == selectedCatName);
Run Code Online (Sandbox Code Playgroud)
所以你需要选择这样的ID:
var selectedOrgId = PD.orgs.FirstOrDefault(o => o.orgname == selectedOrgName).OrgID;
Run Code Online (Sandbox Code Playgroud)
我还建议你检查那里的null,查询的结果
PD.orgs.FirstOrDefault(o => o.orgname == selectedOrgName)
Run Code Online (Sandbox Code Playgroud)
不是空的
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |