我正在尝试将列表框的显示成员设置为来自 linq 查询的串联值:
var query =
from a in db.Customers
select a;
listBox1.DataSouce = query;
我希望能够通过执行以下操作来设置显示成员:
listBox1.DisplayMember = "FirstName" + "LastName";
但显然这是行不通的。
我该怎么做?我想棘手的部分是数据源是一个 linq 查询结果对象。但它是可索引的,所以必须有某种方法。
如果你有一个你自己编写的 Customer 类,或者它是通用的但可扩展的,那么在我看来最好的方法是添加一个新属性
namespace SameNameSpaceAsGeneratedCustomerClass {
public partial class Customer {
public string FullName { get { return FirstName + " " + LastName; } }
}
}
如果您无法做到这一点,那么您将需要查看创建一个 ValueConverter http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx
偶然想通了:
var query =
from a in db.LUT_Employees
where a.position == "Supervisor" && a.department == "Production"
select new { a, Names = a.lastName + ", " + a.firstName };
cboProductionSupervisor.DataSource = query;
cboProductionSupervisor.DisplayMember = "Names";
基本上,我所做的是动态创建一个新字段,就像在SQL中一样,然后将其用作显示成员。
必须告诉您,LINQ 查询不会自行执行,因此如果您正在编写上述查询,则
var query =
from a in db.Customers
select a;
listBox1.DataSouce = query;
您将无法获得所需的输出。
为此,将查询修改为
var query = (from a in db.Customers select new{Name = a.FirstName + a.LastName, OtherDetails = a.OtherDetails}).ToList();
listBox1.DataSouce = query;
ListBox1.DataBind();