2012-11-09 35 views
2

我有一个简单的linq查询返回一组客户。客户由五个字段组成,其中一些可能为空。LINQ ...忽略空值的下拉C#

公司,事业部,事业部,产品组,联系

一位顾客这是一个大公司可能有在所有五个领域(下面是虚构的!)值:

微软 - 窗口 - 开发者集团 - 开始菜单团队 - 鲍勃·琼斯

较小的客户可能是:

Bob的早餐角落 - 空 - 空 - 空 - 鲍勃·琼斯

所以我有一个下拉菜单,我想列出所有的客户:

 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 

但如果其中一个字段为空,则我的下拉列表显示一个完全空值。 (喜欢它不会“跳过”的记载,它会显示一个空行。

如何获得的下拉菜单,显示“completeclientname”即使我有一个或多个字段的空值?

+0

它是LINQ-2-东西在LINQ-2的对象空字段应该不会造成?空结果值,它看起来更像是一个DB逻辑 – Snowbear

+0

实体框架... LINQ到SQL? – walstib

+0

我想你最好用Linq-2对象来做这件事。 Linq-2-Entity可能不会给你任何性能好处,因为你不需要过滤任何东西。 – Snowbear

回答

3
var fields = new [] { m.corpName, m.buName, m.divName, m.pgName, m.contactName } 
           .Where(s => s != null); 
completeclientname = string.Join(" ", fields); 

为了从LINQ的2实体切换到LINQ-2-对象使用AsEnumerable

var qryGetClients = db.clients.AsEnumerable() 
           .Select(m => new { 
               clientid = m.clientID, 
               corpName = m.corpName, 
               ... 
               completeclientname = ... 
               }) 
           .ToArray(); 
+0

很快的圣洁废话。非常感谢。好的,我是一个asp.net新手...我在哪里放置代码?我不只是把它放在查询后,是吗? (因为“m”不是查询以外的任何东西)。或者你在那里做了什么成为查询? – walstib

+0

@walstib,随意将其作为oneliner,并直接放入您的'new {...}'子句中。请注意,我上面的评论可能会影响这个答案是否适用于您。 – Snowbear

+0

我将不得不受术语教育!我如何知道我是否使用Linq2entity与linq2objects vs linq2sql? – walstib