EF6 如何为 DevExpress LookupEdit 获取数据
Posted
技术标签:
【中文标题】EF6 如何为 DevExpress LookupEdit 获取数据【英文标题】:EF6 How to obtain data for DevExpress LookupEdit 【发布时间】:2021-09-29 03:09:20 【问题描述】:我的表格结构如下:
CREATE TABLE employee
(
employeeid integer NOT NULL GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
familyname varchar(100) NOT NULL,
givenname varchar(100) NOT NULL,
position varchar(100) NOT NULL,
startdate date,
address varchar(250),
address2 varchar(250),
city varchar(100),
provincecd character(2),
countrycd character(2),
postalcode character varying(15),
enddate date,
employmentstatusid integer,
photo bytea,
dob date,
);
这个表和其他几个表被配置成一个 C# EF6 项目。
我有一个使用 EF6 实体作为数据存储的 VB.Net WinForms 项目。
我正在使用 DevExpress XtraGrid 控件以交互方式填充我的数据库。问题出现在我需要向 DevExpress LookupEdit 控件提供数据的地方,我使用员工实体中的数据子集来填充 LookupEdit。我要使用的数据可以用下面的 SQL 查询来表示:
SELECT
employeeid
, concat(familyname, ', ', givenname) as fullname
FROM
employee
WHERE
employmentstatusid in (1,2)
ORDER BY
familyname
, givenname
我不确定如何使用 EF6 获取数据来填充我的 LookupEdit。
我是 EF 的新手,但已经使用 ADO.Net 数据集多年。
【问题讨论】:
【参考方案1】:您使用 LINQ to Entities 查询 EF DbContext
。在您的情况下,它将是这样的:
Dim employeeNamesById = myDbContext.employees.
Where(Function(e) 1, 2.Contains(e.employeestatusid)).
OrderBy(Function(e) e.familyname).
ThenBy(Function(e) e.givenname).
Select(Function(e) New With
e.employeeid,
.fullname = e.familyname & ", " & e.givenname
).
ToList()
这将创建一个匿名类型对象的通用List
。您可能更喜欢定义一个具有适当属性的类并创建它的实例。此外,该代码使用函数语法,这通常是我的偏好。如果您愿意,可以使用查询语法,但如果您愿意,我会留给您使用。
【讨论】:
感谢您的回复。看起来它会完全满足我的需要。不幸的是,我收到以下错误: System.NotSupportedException LINQ to Entities 无法识别方法 'System.String Format(System.String, System.Object, System.Object)' 方法,并且此方法无法转换为存储表达式. 快速搜索错误后,更正了添加“AsEnumerable()”的查询。就在选择之前。这完全符合预期!谢谢,非常感谢。 @ShaneBrodie,这不是最好的解决方案。这是我忘记 LINQ to Entities 需要可由 LINQ 提供程序转换为 SQL 的代码的错误。我已经用正确的解决方案更新了我的答案。以上是关于EF6 如何为 DevExpress LookupEdit 获取数据的主要内容,如果未能解决你的问题,请参考以下文章
Devexpress PopupMenu Closing 事件,如 Windows Contextmenu Closing 事件