已经焦头烂额,200分请各位帮小弟我解决有关问题

【急】已经焦头烂额,200分请各位帮我解决问题。

//IEnumerable<DataRow> x = from result in dt.AsEnumerable()
            //                         select result;
            //if (typeid > 0)
            //    x = x.Where(p => p.Field<int>("typeid") == typeid);
            //if (quest != "")
            //{
            //    string[] arr = quest.Split('|');
            //    if (arr.Length > 2)
            //    {
            //        if (arr[1] != "")
            //            x = x.Where(p => p.Field<string>(arr[0]).Contains(arr[1]));
            //        else
            //            x = x.Where(p => p.Field<string>(arr[0]) != "");
            //    }
            //    else
            //        x = x.Where(p => p.Field<string>(arr[0]) != "");
            //}
            //if (typeid > 0)
            //    x = x.Where(p => p.Field<int>.typeid == typeid);


            //if (quest != "")
            //{
            //    string[] arr = quest.Split('|');
            //    if (arr.Length > 2)
            //    {
            //        if (arr[1] != "")
            //            x = x.Where(p => p.Field<string>(arr[0]).Contains(arr[1]));
            //        else
            //            x = x.Where(p => p.Field<string>(arr[0]) != "");
            //    }
            //    else
            //        x = x.Where(p => p.Field<string>(arr[0]) != "");
            //}

            //dt = trans.ToDataTable(x,dt.Rows[0]);

            var x = (from result in dt.AsEnumerable()
                                      select new
                                      {
                                          id = result.Field<int>("id"),
                                          categoryid = result.Field<int>("categoryid"),
                                          typeid = result.Field<int>("typeid"),
                                          title = result.Field<string>("title"),
                                          author = result.Field<string>("author"),
                                          sourcesite = result.Field<string>("sourcesite"),
                                          sourceurl = result.Field<string>("sourceurl"),
                                          summary = result.Field<string>("summary"),
                                          ext_fields = result.Field<string>("ext_fields"),
                                          images = result.Field<string>("images"),
                                          m_details = result.Field<string>("m_details"),
                                          keywords = result.Field<string>("keywords"),
                                          addtime = result.Field<int>("m_details")
                                      }).ToList();

ToDataTable 方法

public DataTable ToDataTable<T>(IEnumerable<T> varlist)
        {
            DataTable dtReturn = new DataTable();
            // column names 
            PropertyInfo[] oProps = null;
            if (varlist == null)
                return dtReturn;
            foreach (T rec in varlist)
            {
                if (oProps == null)
                {
                    oProps = ((Type)rec.GetType()).GetProperties();
                    foreach (PropertyInfo pi in oProps)
                    {
                        Type colType = pi.PropertyType;
                        if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition()
                             == typeof(Nullable<>)))
                        {
                            colType = colType.GetGenericArguments()[0];
                        }
                        dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
                    }
                }
                DataRow dr = dtReturn.NewRow();
                foreach (PropertyInfo pi in oProps)
                {
                    dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue
                    (rec, null);
                }
                dtReturn.Rows.Add(dr);
            }
            return dtReturn;            
        }

注释掉的代码查询都没问题,不过调试跑到ToDataTable方法的这一步,没有转换成我原dt的指定类型,
就是说原来的dt.Rows[0]["id"]是有值的,经过Linq和ToDataTable之后,dt.Rows[0]["id"]报错,没有指定id类型。

然后换ToList(),完全卡在这里不会了。第一次接触Linq,不会,求指点。


------解决思路----------------------
你的问题很简单,此处不要使用匿名类即可:

select new  YourClassName
                                      {
                                          id = result.Field<int>("id"),
                                          categoryid = result.Field<int>("categoryid"),
                                          typeid = result.Field<int>("typeid"),
                                          title = result.Field<string>("title"),
                                          author = result.Field<string>("author"),
                                          sourcesite = result.Field<string>("sourcesite"),
                                          sourceurl = result.Field<string>("sourceurl"),
                                          summary = result.Field<string>("summary"),
                                          ext_fields = result.Field<string>("ext_fields"),
                                          images = result.Field<string>("images"),
                                          m_details = result.Field<string>("m_details"),
                                          keywords = result.Field<string>("keywords"),
                                          addtime = result.Field<int>("m_details")
                                      }).ToList();
------解决思路----------------------
参考我之前的一篇blog:

http://blog.csdn.net/q107770540/article/details/6556210
------解决思路----------------------
引用:
Quote: 引用:

参考我之前的一篇blog:

http://blog.csdn.net/q107770540/article/details/6556210
文章我看了,那我ToList()后的查询条件怎么拼?
我还有

//if (typeid > 0)
            //    x = x.Where(p => p.Field<int>("typeid") == typeid);
            //if (quest != "")
            //{
            //    string[] arr = quest.Split('
------解决思路----------------------
');
            //    if (arr.Length > 2)
            //    {
            //        if (arr[1] != "")
            //            x = x.Where(p => p.Field<string>(arr[0]).Contains(arr[1]));
            //        else
            //            x = x.Where(p => p.Field<string>(arr[0]) != "");
            //    }
            //    else
            //        x = x.Where(p => p.Field<string>(arr[0]) != "");
            //}

两个查询需要实现,又不能直接写在Linq语句里面,因为我需要判断是否用到这个查询

搜  linq  查询表达式目录树
http://developer.51cto.com/art/200909/151787.htm
------解决思路----------------------
引用:


 public void Test() 
        {
            List<Miss> missList = new List<Miss>() {
                new Miss() { Id = 1, Name = "1" }, 
                new Miss() { Id = 2, Name = "2" }, 
                new Miss() { Id = 4, Name = "4" }, 
                new Miss() { Id = 5, Name = "5" }, 
                new Miss() { Id = 3, Name = "3" } 
            };
            var mm = from mis in missList
                     where mis.Id > 2
                     select mis;
            DataTable dt = ToDataTable(mm.ToList());


            string name = dt.Rows[0]["Name"].ToString();


            var x = from m in dt.AsEnumerable()
                    select new
                    {
                        id = m.Field<int>("Id"),
                        Name = m.Field<string>("Name"),
                    };

            foreach( var i in x)
            {
                Response.Write(string.Format("id:{0},name:{1}   ",i.id,i.Name));
            }
            
           
        }

输出正常。

没有你说的问题啊

------解决思路----------------------
1.linq不是万能滴
2.好好看看msdn上datatable那么多方法是干嘛用第

dt.select
dt.RowFilter
dataview.totalbe

3.如果你实在不愿意用dt自己的方法,觉着linq就是高大上,那么请看 
System.Data.DataTable
 dt = new System.Data.DataTable();
 dt.AsEnumerable().
AsDataView().ToTable();


------解决思路----------------------
当然还有另外解法,不管那些东西,先把你那东西直接json一下,然后在json2dt 就ok
------解决思路----------------------
你能把你的数据源JSON文件发出来看一下吗?如果不方便公开,可以不要真实数据,但是格式什么的要一样,这样方便大家调试。
------解决思路----------------------
Json.NET
支持手动通过LINQ读写JSON
使用参考: Json.Net系列教程 4.Linq To JSON,文章提供了查增删改的例子。
引用:
Quote: 引用:

你能把你的数据源JSON文件发出来看一下吗?如果不方便公开,可以不要真实数据,但是格式什么的要一样,这样方便大家调试。

{"id":1,"name":"name1"},{"id":2,"name":"name2"},{"id":3,"name":"name3"},{"id":4,"name":"name4"},{"id":5,"name":"name5"}
就是类似这样的一个格式。不过id和name这种类型不会写死

------解决思路----------------------
已经焦头烂额,200分请各位帮小弟我解决有关问题