LINQ - указанное приведение недопустимо при использовании dataview - PullRequest
0 голосов
/ 04 мая 2011

Я пытаюсь получить наличие строк на основе переданного столбца. Столбец приходит из базы данных как MultiSelect.

bool bCFPresent = IsMultiSelectCFPresent(dvDataTag, "MultiSelect");


public static bool IsPresent(DataView dvDataTag, string colName)
{
  return ((from DataRowView drv in dvDataTag
                     where drv.Row.Field<short>(colName) == 1
                     select drv).Count() > 0 ? true : false);  
}

Но я получаю эту ошибку: -

System.InvalidCastException было не обрабатывается кодом пользователя
Сообщение = "Указанное приведение недействительно." Источник = "System.Data.DataSetExtensions" Трассировки стека: в System.Data.DataRowExtensions.UnboxT`1.ValueField (Object значение) в System.Data.DataRowExtensions.Field [T] (DataRow строка, String columnName)

Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 04 мая 2011

Кажется, проблема в том, что тип столбца с именем colName не может быть приведен к сокращению ...
В целом, ваш код, кажется, не имеет большого смысла.Количество строк одинаково для каждого столбца.Вместо этого попробуйте проверить столбец напрямую, например, так:

public static bool IsPresent(DataView dvDataTag, string colName)
{
    return dvDataTag.Table.Columns.Cast<DataColumn>().
                                      Any(c => c.ColumnName == colName);
}
0 голосов
/ 04 мая 2011

Я не совсем уверен, что вы пытаетесь сделать в своем предикате

drv.Row.Field<short>(colName) == 1

Но ваш IsPresent метод может быть переписан как

Обновление:

public static bool IsPresent(DataView dvDataTag, string colName)
{

        return dvDataTag.Any(drv => string.Equals("1",drv[colName].ToString()));
}

Для подсчета строк

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

PS: Обработка пустых значений оставлена ​​на OP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...