【发布时间】:2019-05-19 14:49:42
【问题描述】:
我目前正在尝试使用 Linq-to-SQL 在 C# 中选择多个列。当像this one 一样查看其他线程时,这是一件非常简单的事情,所以我尝试了:
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:转换无效
我的代码有什么问题?这真的很令人困惑,因为它似乎对其他人有用。如果您需要更多代码,请告诉我
【问题讨论】:
-
你的类数据类型映射到正确的对应sql类型了吗?
-
是的,除了 Birthdate 之外,因为那是我相信 C# 中不存在的 Date。如果有帮助,我可以将数据库结构添加到线程中......?
-
您是否分析了实际的 sql 查询?它返回什么?
-
如果我理解正确,它返回 int: Active and string: Password BUT as Anonymours Types
-
OT .Any() 和 .First() 都会导致数据库查询。您可能需要一个 .ToList() 首先并检查结果
标签: c# linq linq-to-sql