C # Linq-to-SQL несколько столбцов - PullRequest
0 голосов
/ 19 мая 2019

В настоящее время я пытаюсь выбрать несколько столбцов в C # с помощью Linq-to-SQL.Глядя на другие потоки так же, как этот , это довольно просто сделать, поэтому я попытался:

var users = context.GetTable<DbHelper.User>();

var query = from u in users
            where u.Email == TbUsername.Text
            select new { u.Active, u.Password };

if(!query.Any())
{
  MessageBox.Show("Could not find an account with that Email");
  return;
}

var result = query.First();   // Error occurs here

Таблица пользователей в DbHelper:

[Table(Name="Users")]
public class User 
{
    [Column(IsPrimaryKey = true, AutoSync = AutoSync.OnInsert, IsDbGenerated = true)]
    public int Id { get; set; }

    [Column]
    public int RoleID { get; set; }

    [Column]
    public string Email { get; set; }

    [Column]
    public string Password { get; set; }

    [Column]
    public string Firstname { get; set; }

    [Column]
    public string Lastname { get; set; }

    [Column]
    public int OfficeID { get; set; }

    [Column]
    public string Birthdate { get; set; }

    [Column]
    public int Active { get; set; }
}

Таблица в SQL Server выглядит следующим образом:

[ID]        INT           IDENTITY (1, 1) NOT NULL,
[RoleID]    INT           NOT NULL,
[Email]     NVARCHAR(150) NOT NULL,
[Password]  NVARCHAR(50)  NOT NULL,
[FirstName] NVARCHAR(50)  NULL,
[LastName]  NVARCHAR(50)  NOT NULL,
[OfficeID]  INT           NULL,
[Birthdate] DATE          NULL,
[Active]    BIT           NULL,

, что приводит к ошибке

System.InvalidCastException: преобразование недопустимо

Что не так с моим кодом?Это действительно сбивает с толку, так как, кажется, работает на других.Если вам нужно больше кода, пожалуйста, дайте мне знать

Ответы [ 2 ]

1 голос
/ 19 мая 2019

Поскольку тип столбца Active в таблице базы данных - «бит», EF ожидает свойство типа «bool».0 == false, 1 == true, как и следовало ожидать.

1 голос
/ 19 мая 2019

Попробуйте использовать .FirstOrDefault():

var result = query.FirstOrDefault();

Если result равно нулю после этого вызова, то ваш выбор просто не вернул ни одной строки из таблицы базы данных.

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