已经焦头烂额,200分请各位帮小弟我解决有关问题
【急】已经焦头烂额,200分请各位帮我解决问题。
ToDataTable 方法
注释掉的代码查询都没问题,不过调试跑到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.****.net/q107770540/article/details/6556210
------解决思路----------------------
搜 linq 查询表达式目录树
http://developer.51cto.com/art/200909/151787.htm
------解决思路----------------------
输出正常。
没有你说的问题啊
------解决思路----------------------
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,文章提供了查增删改的例子。
------解决思路----------------------
//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.****.net/q107770540/article/details/6556210
------解决思路----------------------
搜 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,文章提供了查增删改的例子。
你能把你的数据源JSON文件发出来看一下吗?如果不方便公开,可以不要真实数据,但是格式什么的要一样,这样方便大家调试。
{"id":1,"name":"name1"},{"id":2,"name":"name2"},{"id":3,"name":"name3"},{"id":4,"name":"name4"},{"id":5,"name":"name5"}
就是类似这样的一个格式。不过id和name这种类型不会写死
------解决思路----------------------