2013-07-12 36 views
0

我有一个Linq查询如下。Linq查询特殊情况下为0值

var DataSource = from m in product 
       select new { Class = m.Class, Id = (new Make(m.Id)).ProductName}; 

我实例化一个类名为make以及基于Id获取ProductName

某些Id的值为0.当我用Id = 0实例化Make类时,它会抛出error。有没有办法我可以实例化生产类只为Id > 0和和Id = 0 display "none"的情况。

回答

0

你想要做的是如此简单:

var DataSource = from m in product 
       select new { 
        Class = m.Class, 
        Id = m.Id == 0 ? "None" : (new Make(m.Id)).ProductName 
       }; 
2
var DataSource = from m in product    
       select new { 
           Class = m.Class, 
           Id = m.Id > 0 ? (new Make(m.Id)).ProductName 
              : "none" 
          }; 

OR

var DataSource = product.Select(p => new { 
             Class = p.Class, 
             Id = m.Id > 0 ? (new Make(m.Id)).ProductName 
                : "none" 
            }); 
2

你可以这样做:

var DataSource = 
    from m in product 
    let displayName = m.Id == 0 ? "none" : (new Make(m.Id)).ProductName 
    select new 
    { 
     Class = m.Class, 
     Id = displayName 
    }; 
2

您实例化一个Make对象,得到它的ProductName,然后扔出去的实例。你为什么在这里上课?这听起来像一个方法会套件这更好。为什么不叫一个方法GetMakeProductName(int id)。在这种方法中,您可以查找产品名称,或者如果id == 0,则返回“无”。

+0

+1,因为这比实例化对象只是为了获取一个属性更好的水平来解决此问题。你甚至可以添加一个方法重载,允许消费者传递一个值,如果不存在的话也可以使用。 –