声明匿名类型,请帮助我 [英] Declare Anonymous Type,pls help me
问题描述
大家好,
我在我的应用程序中使用MVC3.在我的控制器中,我必须返回Json数据以绑定我的JQGrid.
根据条件,我想构建我的Json数据.为此,我需要声明变量
"var jsonData"(请参阅下面的代码)并将其初始初始化为某个值,以便我可以构建查询并最后返回它以绑定JQGrid.
我试图通过多种方式对其进行初始化,例如通过提供空字符串或将其分配为null等.但是我失败了,请告诉我如何将其初始化为null?
Hi All,
I am using MVC3 in my application. In my controller i have to return Json data to bind my JQGrid.
Based on a condition, i want to build my Json data. For this i need to declare the variable
"var jsonData" (refer below code) and initialize it to some value initially, so that i can build the query and return it at last to bind the JQGrid.
I tried to initialize it in many ways like by giving empty string or assigning it to null etc. But i failed,please tell me How can i initialize it to null?
public JsonResult LoadByName(string txtSearchVal, string SearchBy)
{
//var jsonData= new list<string>;
if (SearchBy.ToUpper() == "FIRSTNAME")
{
var jsonData = new
{
records = tskgrp.UserDetails.Count(),
rows = (
from user in tskgrp.UserDetails
where (user.FirstName.StartsWith(txtSearchVal))
select new
{
i = user.ID,
cell = new string[] { user.ID.ToString(), user.FirstName, user.LastName, user.Active.ToString() }
}).ToArray()
};
}
if (SearchBy.ToUpper() == "LASTNAME")
{
var jsonData = new
{
records = tskgrp.UserDetails.Count(),
rows = (
from user in tskgrp.UserDetails
where (user.FirstName.Contains(txtSearchVal))
select new
{
i = user.ID,
cell = new string[] { user.ID.ToString(), user.FirstName, user.LastName, user.Active.ToString() }
}).ToArray()
};
}
return Json(jsonData, JsonRequestBehavior.AllowGet);
} </string>
推荐答案
最简单的解决方案是拥有2个return语句.
如果您希望使用更简洁的方法,请为每种情况创建一个私有函数.
The simplest solution would be to have 2 returns statements.
If you prefer a cleaner approch, then create a private function for each case.
public JsonResult LoadByName(string txtSearchVal, string SearchBy)
{
JsonResult result = null;
if (SearchBy.ToUpper() == "FIRSTNAME")
{
result = LoadByFirstName(txtSearchVal);
}
else if (SearchBy.ToUpper() == "LASTNAME")
{
result = LoadByLastName(txtSearchVal);
}
return result;
}
private JsonResult LoadByFirstName(string txtSearchVal)
{
var jsonData = new
{
records = tskgrp.UserDetails.Count(),
rows = (
from user in tskgrp.UserDetails
where (user.FirstName.StartsWith(txtSearchVal))
select new
{
i = user.ID,
cell = new string[]
{
user.ID.ToString(),
user.FirstName,
user.LastName,
user.Active.ToString()
}
}).ToArray()
};
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
private JsonResult LoadByLastName(string txtSearchVal)
{
var jsonData = new
{
records = tskgrp.UserDetails.Count(),
rows = (
from user in tskgrp.UserDetails
where (user.LastName.Contains(txtSearchVal))
select new
{
i = user.ID,
cell = new string[]
{
user.ID.ToString(),
user.FirstName,
user.LastName,
user.Active.ToString()
}
}).ToArray()
};
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
此外,由于查询仅因where子句而异,因此可以简单地使用OR操作来控制过滤.
Also since your query only varies by the where clause, it is possible to simply use an OR operation to control the filtering.
bool searchFirstName = false;
bool searchLastName = false;
switch (SearchBy.ToUpper())
{
case "FIRSTNAME" :
searchFirstName = true;
break;
case "LASTNAME" :
searchLastName = true;
break;
case null:
case "":
// Unfiltered as is... Adjust if desired.
break;
default:
// Could raise an exception here or return an
// empty result set.
break;
}
//...
var query =
from user in tskgrp.UserDetails
where !searchFirstName || user.FirstName.Contains(txtSearchVal)
where !searchLastName || user.LastName.Contains(txtSearchVal)
select new
{
// ...
};
//...
尽管它可能会慢一些,但是当使用这样的技巧进行过滤时,它将大大减少代码重复.
Although it might be somewhat slower, it will greatly reduce code duplication when a trick like this is used for filtering.
这篇关于声明匿名类型,请帮助我的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!