结合使用动态LINQ库 [英] Use Dynamic LINQ Library with join

查看:94
本文介绍了结合使用动态LINQ库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下是用户界面:

这是我用来触发动态where子句的代码片段:

public void bind()
{
 string filter = "";
            if (!string.IsNullOrEmpty(txtPart.Text))
            {
                 filter = filter + "masterinv.inv_item_id = " + txtPart.Text;
            }
            if (!string.IsNullOrEmpty(txtDescription.Text))
            {
                if (!string.IsNullOrEmpty(filter))
                {
                    filter = filter + " || masterinv.description = " + txtDescription.Text;
                }
                else
                {
                    filter = filter + "masterinv.description = " +  txtDescription.Text;
                }


            }
            if (!string.IsNullOrEmpty(txtVendor.Text))
            {
                if (!string.IsNullOrEmpty(filter))
                {
                    filter = filter + " || vendor.vendor_name = " + txtVendor.Text;
                }
                else
                {
                    filter = filter + "vendor.vendor_name = " +  txtVendor.Text;
                }

            }
 InventoryDataContext dc = new InventoryDataContext(InventoryDBContext.GetConnectionstring());
                var searchResult = (from masterinv in dc.OMS_REF_Master_Inventories 
                                   join vendor in dc.OMS_REF_Vendors on masterinv.inv_item_id equals vendor.inv_item_id
                                   Where(filter)
                                   select new OMS_REF_Master_Inventory
                                    {
                                        inv_item_id = masterinv.inv_item_id,
                                        description = masterinv.description,
                                        unit_of_measure = masterinv.unit_of_measure,
                                        lot_id = masterinv.lot_id,
                                        serial_id = masterinv.serial_id,
                                        mfg_id = masterinv.mfg_id,
                                        mfg_item_id = masterinv.mfg_item_id,
                                        item_status_current = masterinv.item_status_current,
                                        cm_unit_cost = masterinv.cm_unit_cost,
                                        sync_dte = masterinv.sync_dte
                                    }).ToList();
                     searchResult;
 }

在上面的代码过滤器的组合框和文本字段的组合基础上创建的 选择.

在这一个过滤器中是:

masterinv.inv_item_id  = 'A' || masterinv.description = 'F' || vendor.vendor_name = 'V'

它可能会有所不同,具体取决于组合框值的选择. BuildQueryFilter方法中存在组合框的所有情况.

问题:

我无法在此联接中触发where子句.我要去哪里错了?

解决方案

我认为您不能将这些%与linq查询一起使用.

您可以使用Contains()/StartsWith()/EndsWith()

代替

请参阅此以获取更多信息...

如何在Linq中执行类似SQL的%?

如何使用linq进行LIKE查询?

使用Sql方法.

where SqlMethods.Like(c.CustomerName, "%/abc/%")

Following is the UI :

And this is code snippet i am using to fire dynamic where clause :

public void bind()
{
 string filter = "";
            if (!string.IsNullOrEmpty(txtPart.Text))
            {
                 filter = filter + "masterinv.inv_item_id = " + txtPart.Text;
            }
            if (!string.IsNullOrEmpty(txtDescription.Text))
            {
                if (!string.IsNullOrEmpty(filter))
                {
                    filter = filter + " || masterinv.description = " + txtDescription.Text;
                }
                else
                {
                    filter = filter + "masterinv.description = " +  txtDescription.Text;
                }


            }
            if (!string.IsNullOrEmpty(txtVendor.Text))
            {
                if (!string.IsNullOrEmpty(filter))
                {
                    filter = filter + " || vendor.vendor_name = " + txtVendor.Text;
                }
                else
                {
                    filter = filter + "vendor.vendor_name = " +  txtVendor.Text;
                }

            }
 InventoryDataContext dc = new InventoryDataContext(InventoryDBContext.GetConnectionstring());
                var searchResult = (from masterinv in dc.OMS_REF_Master_Inventories 
                                   join vendor in dc.OMS_REF_Vendors on masterinv.inv_item_id equals vendor.inv_item_id
                                   Where(filter)
                                   select new OMS_REF_Master_Inventory
                                    {
                                        inv_item_id = masterinv.inv_item_id,
                                        description = masterinv.description,
                                        unit_of_measure = masterinv.unit_of_measure,
                                        lot_id = masterinv.lot_id,
                                        serial_id = masterinv.serial_id,
                                        mfg_id = masterinv.mfg_id,
                                        mfg_item_id = masterinv.mfg_item_id,
                                        item_status_current = masterinv.item_status_current,
                                        cm_unit_cost = masterinv.cm_unit_cost,
                                        sync_dte = masterinv.sync_dte
                                    }).ToList();
                     searchResult;
 }

In the above code filter created on the basis of combination of combo box and text field selection.

Out of these one filter is :

masterinv.inv_item_id  = 'A' || masterinv.description = 'F' || vendor.vendor_name = 'V'

it may vary depend upon the combobox value selection. All cases of Combo box present in BuildQueryFilter Method.

PROBLEM :

I am not able to fire where clause in this join. Where i am going wrong ?

解决方案

I think you cannot use those % with linq queries.

Instead of % you can use Contains()/StartsWith()/EndsWith()

refer this for more info...

How to do SQL Like % in Linq?

How to do a LIKE query with linq?

Or

Use Sql Methods..

where SqlMethods.Like(c.CustomerName, "%/abc/%")

这篇关于结合使用动态LINQ库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆