【发布时间】:2014-05-21 17:52:30
【问题描述】:
我正在尝试设置一个 LINQ 查询以用作组合框数据源。组合框是 DisplayMember 的名称和 ValueMember 的 PeopleID 的简单列表。
问题是名称可以是 First Last 或 Last, First 格式。我有一个 GetFullName(intPeopleID) 函数来返回正确的名称序列。无论哪种方式,组合框名称都必须按字母顺序排序,因此需要在第一个查询获得全名后进行排序。
Dim LQBackupOriginalA = From a In DCAppMain.tblPeopleMain
Where a.BusinessGroupID = intBusinessGroupID
Select Person = PP.GetFullName(a.PeopleID), a.PeopleID
Dim LQBackupOriginalB = From b In LQBackupOriginalA
Order By b.Person
Select b.Person, b.PeopleID
cboBackupOriginal.DataSource = LQBackupOriginalA
cboBackupOriginal.DisplayMember = "Person"
cboBackupOriginal.ValueMember = "PeopleID"
这不起作用,因为函数 'GetFullName' 不能转换为 SQL - 当然。我已经尝试了很多变体,但都没有成功。
我可以首先将第一个查询中的数据附加到本地表中,然后在设置组合框的数据源之前使用对数据进行排序的查询将其拉回。但我想知道是否有更直接的方法?
【问题讨论】:
-
看起来
PP.GetFullName做了额外的数据库查询。在主查询中获取所需数据并提供PP.GetFullName完成其工作所需的所有数据可能要高效得多。 -
格特 - 你是对的。这将获取名字和姓氏,然后根据客户的偏好将这两个单词按顺序排列,这可能是任何一种方式。然后 QueryB 需要按 FullName(First Last 或 Last, First)排序,无论客户希望以哪种方式显示名称。我想知道该怎么做?
标签: vb.net winforms linq combobox datasource