比较列表类型年份的值与linq中的datetime列到sql查询

时间:2013-08-16 02:13:36

标签: linq linq-to-sql

我有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并仅显示该特定年份的数据

2 个答案:

答案 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())))