2012-11-09 66 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