LINQ中的CopyToDataTable

时间:2016-07-15 11:42:16

标签: linq datatable webmethod

参考这个我在WebForm1.aspx.cs

中添加一个方法

Reference link

但是当我添加并构建我的代码时,就会出现错误

扩展方法必须在顶级静态类中定义; CustomLINQtoDataSetMethods是一个嵌套类

扩展方法必须在顶级静态类中定义; CustomLINQtoDataSetMethods是一个嵌套类

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

[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不在intellisence列表中

在dq中,数据是

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

1 个答案:

答案 0 :(得分:1)

它准确地说明了问题所在。您必须在 public not-nested 类中定义扩展方法。正如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 置于其他类中。确保它在任何其他类的 之外,并且应该修复该问题。