动态where子句有两个实体

时间:2017-11-29 14:21:16

标签: linq linq-to-entities linq-to-objects

我需要两个实体之间的过滤器。 有两个表1.User 2.Product 带有用户表的产品图。

我将创建一个动态过滤器。

我需要找出所有有'测试'产品

条件:如果userFilter count为0,那么我需要所有测试产品与受尊敬的用户。

如果userFilter在那里且productFilter在那里,那么下面的代码正在运行,但如果userFilter不存在且productFilter在那里则返回0行。如何找到拥有测试产品的用户? ?

这是我的代码。

@(Html.Kendo().Grid<DirectOrderTracker.Models.ViewModels.TempOrderViewModel>()
        .Name("grid")
        .ToolBar(toolBar =>
        {
            toolBar.Create();
            // toolBar.Save();
        })
        .Filterable(ftb =>
        {
            ftb.Extra(false);
            ftb.Operators(op =>
            {
                op.ForString(str =>
                {
                    str.Clear().Contains("Contains");
                });
            });
        })
        .Editable(editable => editable.Mode(GridEditMode.InCell))
        .Pageable()
        .Events(e => { e.DataBound("onDataBound"); })
        .Navigatable()
        .Sortable()
        .Scrollable()
        .HtmlAttributes(new { style = "height:650px;" })
        .Columns(columns =>
        {
            columns.Bound(p => p.TempOrderID).Hidden();
            columns.Bound(p => p.EventHexCode).ClientTemplate("<span style='display: inline-block; width: 100%; height: 100%; background-color: #= EventHexCode #'>&nbsp;</span>").EditorTemplateName("ColorPicker").Width(120);
            columns.ForeignKey(p => p.CustCode, (System.Collections.IEnumerable)ViewData["defaultCustCode"], "CustCode", "CustDesc").Title("Customer").EditorTemplateName("CustDescAutoComplete").Width(180);
            columns.Bound(p => p.PONum).Title("Our PO#").Width(90);
            columns.Bound(p => p.CustRef).Title("Cust Ref#").Width(90);
            columns.Bound(p => p.ApptTime).Title("Appt").Width(70).Filterable(x => x.UI(GridFilterUIRole.TimePicker));
            columns.Bound(p => p.Qty).Width(65).Filterable(false);
            columns.ForeignKey(p => p.ProdNum, (System.Collections.IEnumerable)ViewData["defaultProdNum"], "ProdNum", "ProdDesc").Width(130).Title("Size/Spec").EditorTemplateName("ProdNumAutoComplete");
            columns.Bound(p => p.SalePrice).Format("{0:c}").Width(75).Title("Price").Filterable(false);
            columns.Bound(p => p.SONum).Title("Our SO#").Width(120);
            columns.Bound(p => p.DueDate).Format("{0:MM/dd/yyyy}").Width(120).Title("Due Date");
            columns.Bound(p => p.LoadDate).Format("{0:MM/dd/yyyy}").Width(120).Title("Load Date");
            columns.ForeignKey(p => p.VendCode, (System.Collections.IEnumerable)ViewData["defaultVendCode"], "VendCode", "VendDesc").Title("Vendor").EditorTemplateName("VendDescAutoComplete").Width(130);
            columns.Bound(p => p.Cost).Format("{0:c}").Width(75).Title("Cost").Filterable(false);
            columns.Bound(p => p.Manifest).Title("Mani").Width(55);
            columns.Bound(p => p.VendPO).Title("Ven PO#").Width(120);
            columns.Bound(p => p.VendRef).Title("Ven Ref#").Width(120);
            columns.ForeignKey(p => p.CarrCode, (System.Collections.IEnumerable)ViewData["defaultCarrCode"], "CarrCode", "CarrDesc").EditorTemplateName("CarrDescAutoComplete").Title("Truck").Width(120);
            columns.Bound(p => p.FrghtRate).Format("{0:c}").Width(75).Title("Frght").Filterable(false);
            columns.Bound(p => p.Comment).Title("Comment").Width(120);
            columns.Command(command =>
            {
                //   command.Edit();
                command.Destroy();
            }).Width(110);
        })
        .DataSource(dataSource => dataSource
                                        .SignalR()
                                        .AutoSync(true)
                                        .Events(events => events.Push(@<text>
                                            function(e) {
                                           // var notification = $("#notification").data("kendoNotification");
                                          //  notification.success(e.type);
                                            }
                                        </text>))
                                            .PageSize(24)
                                            .Transport(tr => tr
                                                .Promise("hubStart")
                                                .Hub("hub")
                                                .Client(c => c
                                                        .Read("read")
                                                        .Create("create")
                                                        .Update("update")
                                                        .Destroy("destroy"))
                                                .Server(s => s
                                                        .Read("read")
                                                        .Create("create")
                                                        .Update("update")
                                                        .Destroy("destroy"))
                                            )
                                            .Schema(schema => schema
                                            .Model(model =>
                                            {
                                                model.Id(p => p.TempOrderID);
                                                model.Field(p => p.CustCode).Editable(true);
                                                model.Field(p => p.DueDate).Editable(true);
                                                model.Field(p => p.LoadDate).Editable(true);
                                                model.Field(p => p.ProdNum).Editable(true);
                                                model.Field(p => p.Qty).Editable(true);
                                                model.Field(p => p.CarrCode);
                                                model.Field(p => p.VendCode).Editable(true);
                                                model.Field(p => p.SalePrice).Editable(true);
                                            }
                                            ))))

1 个答案:

答案 0 :(得分:0)

如果我理解正确,那么当userFiler计数为0时,您需要拥有测试产品的所有用户。

List<User> res;
var user = _localmarketEntities.Users.Where(deleg).ToList();
if (user.Count == 0) {
    res = _localmarketEntities.Products.Where(delegProduct).Select(q => new User() {
       Id = q.Id,
       Username = q.Username,
       Product = q
    }).ToList();
}
else {
    res = _localmarketEntities.Users.Where(deleg)
          .Select(x => new
          {
              x.Id,
              x.Username,
              Product = x.Products.Where(delegProduct).Select(y => new
              {
                  y.Id,
                  y.Name
              }).ToList()
            })
            .ToList();
}