LINQ 中的 CopyToDataTable

CopyToDataTable in LINQ

参考这个我在WebForm1.aspx.cs

中添加了一个方法

Reference link

但是当我添加和构建我的代码时出现错误

必须在顶级静态中定义扩展方法class; CustomLINQtoDataSetMethods 是嵌套的 class

必须在顶级静态中定义扩展方法class; CustomLINQtoDataSetMethods 是嵌套的 class

我这样做是因为我有网络方法

[WebMethod]
    public static DataTable search_data(DateTime fromdate, DateTime todate, string regiondrop)
    {

        try
        {

            T1 ts = new T1();
            var dq = (from vv in ts.tblVe
                      join rv in ts.tblReg on vv.ID equals rv.ID
                      join re in ts.tblRegi on rv.RID equals re.RID
                      where
                      re.Region == regiondrop
                      && re.StartDate <= fromdate
                      && re.EndDate >= todate
                      orderby
                      vv.ID,
                      rv.OwnerName
                      select new
                      {
                          ID = vv.ID,
                          ownername = rv.OwnerName,
                          RegNo = rv.RegNo,
                          Speed = rv.Speed,
                      });
            var dt = dq.cop();
                     }
        catch (Exception)
        {
            throw new Exception();

        }

    }

当我添加这一行时 var dt = dq.cop();使用此问题的参考和答案 reference 2 然后 CopyToDataTable 不在智能列表中

dq 中的数据是

[0] = { ID = 1, OName = "Khn", RegNo = "AJ-24",Speed = "124" }
[1] = { ID = 2, OName = "hah", RegNo = "AL-91",Speed = "95" }

它准确地说明了问题所在。您必须在 public not-nested class 中定义扩展方法。如 MSDN 所述:

public static class CustomLINQtoDataSetMethods
{
    public static DataTable CopyToDataTable<T>(this IEnumerable<T> source)
    {
        return new ObjectShredder<T>().Shred(source, null, null);
    }

    public static DataTable CopyToDataTable<T>(this IEnumerable<T> source,
                                                DataTable table, LoadOption? options)
    {
        return new ObjectShredder<T>().Shred(source, table, options);
    }    
}

而且您很可能已将 CustomLINQtoDataSetMethods 放在 其他 class 中。确保它 在任何其他 class 之外 并且问题应该得到解决。