Почему я не понимаю?CopyToDataTable() в запросе Linq()

следующий пример кода заимствован из MSDN здесь. Я не получаю запрос.CopyToDataTable() в моем коде. (см. закомментированную строку в моем следующем коде).

public static bool SetPhysicianAsNotonServer(DataTable dt)
        {
            DataTable dtPhysicianServer = dt;
            DataTable dtPhysicianClient = GetPhysicianClient();

            var query =
                from SPhysician in dtPhysicianServer.AsEnumerable()
                join CPhysician in dtPhysicianClient.AsEnumerable()
                on SPhysician.Field<string>("PhysicianNumber") equals
                    CPhysician.Field<string>("PhysicianNumber")
                select new
                {
                    PhysicianNumber = CPhysician.Field<string>("PhysicianNumber")
                 };

            DataTable FilterDt = query; //query.CopyToDataTable();
            //YET TO DO CODE HERE
            return true;
        }

6 ответов


оператор select возвращает последовательность строк (IEnumerable<string> или IQueryable<string>), а не последовательность DataRows. CopyToDataTable () доступен только на IEnumerable<T> где T или происходит от DataRow.

вместо select new { ... } - который просто даст вам новую последовательность этого типа, попробуйте:

select CPhysician;

который должен возвращать желаемую последовательность строк CPhysician.

редактировать Если вы хотите преобразовать не-DataTable-производный T в datatable, MSDN есть пример класса, который отражает любой тип и выполняет преобразование.

http://msdn.microsoft.com/en-us/library/bb669096.aspx


Он существует в определенном пространстве имен вы импортируете его?

System.Data.DataTableExtensions.CopyToDataTable() 

также подтвердите добавление этой ссылки

System.Data.DataSetExtensions 

Я думаю, это потому, что вы создаете анонимный тип для хранения


необходимо указать System.Data.DataSetExtensions сборка и использовать System.Data пространство имен.


вы ссылались на систему.Данные.Сборка DataSetExtensions? Этот метод расширения определен там.


переход дальше в MSDN online приводит меня к этой странице:http://msdn.microsoft.com/en-us/library/system.data.datatableextensions.aspx

Он говорит, что это в системе.Пространство имен данных (с помощью System.Data), и вам нужно ссылаться на систему.Данные.DataSetExtensions.файл DLL.