CopyToDataTable in LINQ



通过引用,我在WebForm1中添加了一个方法.aspx.cs

参考链接

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

扩展方法必须在顶级静态类中定义;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(); 与这个问题参考 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类中定义扩展方法。正如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放在其他类。 确保它在任何其他类之外,并且应该修复该问题。

最新更新