从Linq查询中获取数据表
本文关键字:获取 数据表 查询 Linq | 更新日期: 2023-09-27 17:51:17
我想从Linq查询得到一个数据表,这是我所做的。
public static DataTable GetAllDataNoWise(string UniqueNo)
{
using (var objEntity = new DbContext())
{
var Query = from TBL in objEntity.GenerateCodes.AsEnumerable()
where TBL.UniqueNo == UniqueNo
select new
{
PrimaryID = TBL.GenerateCodeID,
TBL.Code,
ExpiryDate = TBL.ExpiryDate.ToShortDateString(),
};
DataTable dt = LINQToDataTable(Query);
return dt;
}
}
public DataTable LINQToDataTable<T>(IEnumerable<T> varlist)
{
DataTable dtReturn = new DataTable();
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;
}
错误生成如下
非静态字段、方法或属性
需要对象引用Code.LINQToDataTable<<anonymous type: int PrimaryID, string Code, string ExpiryDate>>(IEnumerable<<anonymous type: int PrimaryID, string Code, string ExpiryDate>>)
由于第一个方法是静态的,所以它不能调用其他方法,除非它是静态的或从对象引用实例化的。
您可以将static
添加到第二个方法
public static DataTable LINQToDataTable<T>(IEnumerable<T> varlist)
或者实例化包含第二个方法的类,并从第一个方法调用它:
var obj = new MyClass();
DataTable dt = obj.LINQToDataTable(Query);