如何在linq中的where子句内写条件

时间:2012-11-08 00:24:04

标签: asp.net-mvc linq

我想在where子句中写条件。因为如果名字或姓氏为空,我不想在where子句中添加它。另外,我想添加它。

所以我写了

var query1 = from opv in _opvRepository.Table
                         join o in _orderRepository.Table on opv.OrderId equals o.Id
                         join gr in _graduandRepository.Table on opv.graduand_id equals gr.graduand_id
                         join pv in _productVariantRepository.Table on opv.ProductVariantId equals pv.Id
                         join p in _productRepository.Table on pv.ProductId equals p.Id
                         where (opv.ceremony_id == ceremony_id) && 
                         (!o.Deleted) && (opv.IsHireItem == true)  &&
                         (!p.Deleted) &&
                         (!pv.Deleted) && (opv.ceremony_id == ceremony_id)      
                       //  group opv by opv.OrderId into g
                         select new
                         {
                             opvTable = opv,
                             grTable = gr,

                         };


// This is not working. I have problem in here. How to add this??
             if (!String.IsNullOrEmpty(Fname))
                 query1 = query1.Where(grTable = > grTable.first_name == Fname);




            var result = query1.ToList().Select(x =>
            {
                return new HireItemReportLine()
                {
                    OrderId = x.opvTable.OrderId,
                    OrderDate=x.opvTable.Order.CreatedOnUtc,
                    Amount= x.opvTable.Order.OrderSubtotalExclTax,
                    PaymentMethod = x.opvTable.Order.PaymentMethodSystemName,
                    paidDate = x.opvTable.Order.CreatedOnUtc,

                    Fname = x.grTable.first_name,
                    MName = x.grTable.middle_name,
                    LName = x.grTable.last_name,



                };
            }).ToList();

我的说法有什么问题?

1 个答案:

答案 0 :(得分:2)

请注意,原始查询会选择包含两个属性的匿名类型:opvTablegrTable。因此,您需要在后续的Where子句中使用其中一个属性,如下所示:

   query1 = query1.Where(item => item.grTable.first_name == Fname);