Извлечение данных из данных - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь получить username из DataTable на UserID, используя LINQ, используя этот пример.

//Example 1:
var user = (from dr in users.AsEnumerable()
               where dr.Field<int>("UserID") == 2
               select dr).First();
//Example 2:
string user = (from dr in users.AsEnumerable()
               where dr.Field<int>("UserID") == 3
               select dr.Field<string>("UserName")).First();

Два приведенных выше примера вызывают эту ошибку:

System.InvalidCastException: 'Указанное приведение недействительно.'

Однако запрос работает, если мой where clause выполняет поиск по string вместо int.

string result = (from row in users.AsEnumerable()
                 where row.Field<string>("UserName") == "TUser"
                 select row.Field<string>("UserName")).First();

Как получить одно имя пользователя по идентификатору пользователя?

ОБНОВЛЕНИЕ:

Не уверен, что это актуально, но данные заполняются десериализацией файла .json с использованием JSON.NET

Образец .json

[{ «ИД пользователя»: 2, «Имя пользователя»: «Пользователь», «StatusID»: 1, «CreateDate»: «2018-04-25T14: 02: 00», "CreateBy": "Admin", «ID»: «9855626A-FEF1-4936-9EF6-DD896F80AE35» }, { «ИД пользователя»: 3, "UserName": "TUser", «StatusID»: 1, «CreateDate»: «2018-04-25T14: 02: 00», "CreateBy": "Admin", «ID»: «928D6099-0665-4FC8-BE4C-8E145E56E8BF» } ]

И заполнение данных:

DataTable users = JsonConvert.DeserializeObject<DataTable>(File.ReadAllText(userPath));

1 Ответ

0 голосов
/ 26 апреля 2018

Вам нужно использовать правильный тип данных для UserID столбца

Проверьте тип столбца вашего UserID в БД и используйте следующую таблицу

BigInt -> long
int -> int
SmallInt -> short
varchar/nvarchar -> string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...