我有一个简单的linq查询,可以返回一组客户。客户由五个字段组成,其中一些字段可能是无效的。
公司,业务部门,部门,产品组,联系人
一家大公司的客户可能在所有五个领域中都有价值(以下是虚构的!):
Microsoft -Windows-开发人员组 - 开始菜单团队-Bob Jones
较小的客户可能是:
鲍勃的早餐角 - 零-NULL -NULL -NULL -BOB JONES
所以我有一个下拉列表,我想列出所有客户:
var qryGetClients = from m in db.clients
select new
{
clientid = m.clientID,
corpName = m.corpName,
buName = m.buName,
divName = m.divName,
pgName = m.pgName,
contactName = m.contactName
};
DDClientList.DataSource = qryGetClients;
DDClientList.DataTextField = "completeclientname";
DDClientList.DataValueField = "clientid";
DDClientList.DataBind();
现在我知道我可以在查询中这样做,以将字段串入一个字段:
completeclientname= m.corpName + " " + m.buName + " " + m.divName + " " + m.pgName + " " + m.contactName
但是,如果其中一个字段为null,则我的下拉列表显示完全无效的值。(就像,它不会"跳过"记录,它显示一个空行。
即使我在一个或多个字段中有零值,我如何获得下拉列表以显示" pounteclientname"?
var fields = new [] { m.corpName, m.buName, m.divName, m.pgName, m.contactName }
.Where(s => s != null);
completeclientname = string.Join(" ", fields);
为了从linq-2-entity切换到linq-2-Objects使用AsEnumerable
:
var qryGetClients = db.clients.AsEnumerable()
.Select(m => new {
clientid = m.clientID,
corpName = m.corpName,
...
completeclientname = ...
})
.ToArray();