【问题标题】:how to use (dynamic)null concept to this query如何对此查询使用(动态)空概念
【发布时间】:2014-05-02 13:47:19
【问题描述】:

我想用不同类型的条件绑定网格视图在这里显示我使用(动态)null 概念进行查询声明,但在休息结束时我无法获取与查询关联的字段。

我把我的代码放在这里:

 public void FillGrid(string GroupByText, string ColumnName, string SearchText)
    {
        using (DataClassesDataContext db = new DataClassesDataContext())
        {
            var query = (dynamic)null;
            switch (GroupByText)
            {
                case "Enquiry":
                    query = db.Enquiries.Where(i => i.enttype_id.Equals("1")).OrderByDescending(i => i.Created_date).Select(i => new
                    {
                        Ref_no = i.Ref_no,
                        Name = db.Parties.Where(p => p.Id.Equals(i.party_id)).Select(p => p.Name).SingleOrDefault(),
                        StatusName = db.Status.Where(s => s.Id.Equals(i.status_id)).Select(s => s.StatusName).SingleOrDefault(),
                        CategoryName = db.Categories.Where(c => c.Id.Equals(i.category_id)).Select(c => c.category_name).SingleOrDefault(),
                        IsUregent = i.IsUregent,
                        Created_date = i.Created_date
                    }).FilterForColumn(ColumnName,SearchText).ToList();
                    break;
                case "Visit":
                    query = db.Enquiries.Where(i => i.enttype_id.Equals("2")).OrderByDescending(i => i.Created_date).Select(i => new
                     {
                         Ref_no = i.Ref_no,
                         Name = db.Parties.Where(p => p.Id.Equals(i.party_id)).Select(p => p.Name).SingleOrDefault(),
                         StatusName = db.Status.Where(s => s.Id.Equals(i.status_id)).Select(s => s.StatusName).SingleOrDefault(),
                         CategoryName = db.Categories.Where(c => c.Id.Equals(i.category_id)).Select(c => c.category_name).SingleOrDefault(),
                         IsUregent = i.IsUregent,
                         Created_date = i.Created_date
                     }).FilterForColumn(ColumnName,SearchText).ToList();
                    break;
                default:
                    query = db.Enquiries.OrderByDescending(i => i.Created_date).Select(i => new
                    {
                        Ref_no = i.Ref_no,
                        Name = db.Parties.Where(p => p.Id.Equals(i.party_id)).Select(p => p.Name).SingleOrDefault(),
                        StatusName = db.Status.Where(s => s.Id.Equals(i.status_id)).Select(s => s.StatusName).SingleOrDefault(),
                        CategoryName = db.Categories.Where(c => c.Id.Equals(i.category_id)).Select(c => c.category_name).SingleOrDefault(),
                        IsUregent = i.IsUregent,
                        Created_date = i.Created_date
                    }).FilterForColumn(ColumnName, SearchText).ToList();
                    break;
            }
            int count = 0;
            DataSet myDataSet = new DataSet();
            DataTable dt = new DataTable();
            dt.Columns.Add(new DataColumn("Ref_no", typeof(string)));
            dt.Columns.Add(new DataColumn("Name", typeof(string)));
            dt.Columns.Add(new DataColumn("StatusName", typeof(int)));
            dt.Columns.Add(new DataColumn("CategoryName", typeof(string)));
            dt.Columns.Add(new DataColumn("IsUregent", typeof(bool)));
            dt.Columns.Add(new DataColumn("Created_date", typeof(DateTime)));
            foreach (var item in query)
            {
                if (item != null)
                {
                    DataRow dr = dt.NewRow();
                    dr["Ref_no"] = item.//not founding field that
                }
            }
        }
    }

【问题讨论】:

    标签: linq asp.net-3.5


    【解决方案1】:

    .FilterForColumn(ColumnName,SearchText) 的返回类型是什么? 如果它只是过滤,而不改变Data Type,我想你可以使用这个:

    var query = Enumerable.Repeat(new
            {
                Ref_no = string.Empty,
                Name = string.Empty,
                StatusName = default(int),
                CategoryName = string.Empty,
                IsUregent = default(bool),
                Created_date = default(DateTime)
            }, 0)
            .ToList();
    

    而不是这个:

    var query = (dynamic)null;
    

    也许这可以解决你的问题

    【讨论】:

    • 好极了。那是什么??它如何解决我的问题。在这里我将这种技术与其他形式一起使用,但没有发现这样的问题。
    • 当你使用这行var query = (dynamic)null;时,querytype会在编译时被知道,并且你不能访问它的成员,如果你定义query,也像这样object query = null; ,同样你不能访问它的成员,所以你需要精确的query类型来访问它的成员,所以你需要为你的查询创建一个类型,比如List<YourObject> query = new List<YourObject>();,或者如果你使用anonymous类型,你可以使用这个技巧
    猜你喜欢
    • 2017-06-10
    • 2013-03-21
    • 1970-01-01
    • 2015-10-09
    • 2011-04-13
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多