LINQ на DataView - PullRequest
       28

LINQ на DataView

3 голосов
/ 01 февраля 2012

Я не могу запросить DataView без приведения.Две строки кода в методе IsPresent взяты из " LINQ - указанное приведение недопустимо при использовании dataview " и, похоже, работает для всех, кроме одного комментатора.Я «использую» пространство имен LINQ, в чем моя проблема?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // works
            DataView o = new DataView();
            var p = from x in o.Cast<DataRowView>() where x.Row.Field<bool>("xxx") select x.Row;
        }

        public static bool IsPresent(DataView dvDataTag, string colName)
        {
            // does not work
            int count = dvDataTag.Count(drv => string.Equals("1", drv[colName].ToString())); 
            return dvDataTag.Any(drv => string.Equals("1", drv[colName].ToString()));
        } 

    }
}

Ошибка 2 «System.Data.DataView» не содержит определения «Any» и не имеет метода расширения «Any», принимающегоможно найти первый аргумент типа «System.Data.DataView» (отсутствует директива using или ссылка на сборку?) A: \ TEMP \ ConsoleApplication1 \ ConsoleApplication1 \ Program.cs ConsoleApplication1 20 20

1 Ответ

2 голосов
/ 01 февраля 2012

попробуйте привести таблицу так, как вы это делали в методе Main, следующим образом:

            int count = dvDataTag.OfType<DataRowView>().Count(drv => string.Equals("1", drv[colName].ToString()));
        return dvDataTag.OfType<DataRowView>().Any(drv => string.Equals("1", drv[colName].ToString()));

Я также попытался .Cast<DataRowView>() как в методе Main, и это также скомпилировано.

...