我有linq到sql查询,我用来绑定网格
var query = (from bottom in
(from d in context.tbl_pl_data
where (d.lng_clientid.Equals(ClientId) && d.str_name.Equals(name) && d.int_deleted.Equals(0))
orderby d.dte_mod_on descending
select d).AsEnumerable()
select new tbl_pl_data
{
lng_id = bottom.lng_id,
str_itemdsc = bottom.str_itemdsc,
dte_cr_on = bottom.dte_cr_on,
str_cr_by = bottom.str_cr_by,
str_mod_by = bottom.str_mod_by,
dte_mod_on = bottom.dte_mod_on
}).ToList().OrderByDescending(d=>d.dte_mod_on).ToList();
现在我想根据年份显示这些数据。 我的会话有一年的价值..价值可能是空的或列表类型有一年或多年......我的意思是2009或2009年和2010年。我从下面的会话中获得多年的价值。
Session["UserYearSelected"] = model.str_year_selected.Split(',').ToList();
现在,我如何更改上面的查询,使其接受null或年份值列表,并与dte_cr_on列进行比较,该列是datetime并仅显示该特定年份的数据
答案 0 :(得分:1)
我会抓住这个并重新调整你需要的东西:
from d in context.tbl_pl_data
where (d.lng_clientid.Equals(ClientId) && d.str_name.Equals(name) && d.int_deleted.Equals(0)
&& d.dte_cr_on.Year.Contains(Session["UserYearSelected"])
如果有多年,您可能需要将Session["UserYearSelected"]
转换为string[]
显然无法测试您的查询或检查它编译,但希望它会帮助您。
您还可以查看this以获得进一步的帮助。
答案 1 :(得分:0)
感谢恶魔的链接...帮助我解决问题..这里是解决方案
string[] split=new string[]{};
if (HttpContext.Current.Session["UserYearSelected"] != null)
{
split = HttpContext.Current.Session["UserYearSelected"].ToString().Split(',');
}
var query = (from anode in
(from d in context.tbl_pl_data
where (d.lng_clientid.Equals(ClientId) && d.str_name.Equals(name) && d.int_deleted.Equals(0) && (split.Length==0 || split.Contains(d.dte_cr_on.Year.ToString())))