【发布时间】:2012-11-10 00:17:58
【问题描述】:
我有一个返回一组客户的简单 linq 查询。客户由五个字段组成,其中一些字段可能为空。
公司、业务部门、部门、产品组、联系人
一家大公司的客户可能在所有五个字段中都有值(以下是虚构的!):
Microsoft - Windows - 开发组 - 开始菜单团队 - Bob Jones
较小的客户可能是:
Bob 的早餐角 - 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
但如果其中一个字段为空,我的下拉菜单会显示一个完全为空的值。 (例如,它不会“跳过”记录,而是显示一个空行。
即使我在一个或多个字段中有空值,如何让下拉菜单显示“完整客户端名称”?
【问题讨论】:
-
是 linq-2-Something 吗?在 linq-2-objects 中,null 字段不应该导致 null 结果值,它看起来更像是一个 DB 逻辑
-
实体框架... linq to sql?
-
我认为你最好用 Linq-2-objects 来做这件事。 Linq-2-Entity 可能不会给您带来任何性能优势,因为您不过滤任何内容。
-
我确实有一个 where 子句,但为了简单起见,我把它省略了。 (这里 isactive = true)
-
然后在您的
where子句之后在我的回答中执行AsEnumerable。在这种情况下,过滤将在数据库中完成,而字符串连接将在客户端完成