从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>>)

需要对象引用

从Linq查询中获取数据表

由于第一个方法是静态的,所以它不能调用其他方法,除非它是静态的或从对象引用实例化的。

您可以将static添加到第二个方法

public static DataTable LINQToDataTable<T>(IEnumerable<T> varlist)

或者实例化包含第二个方法的类,并从第一个方法调用它:

var obj = new MyClass();
DataTable dt = obj.LINQToDataTable(Query);