当包含多个字段的列表时使用包含

时间:2014-08-20 13:10:37

标签: c# sql linq linq-to-sql

我使用两个视图都放在不同的数据库上(在不同的SERVERS上)。我从两者获取记录,我必须在LINQ中使用完全外连接功能(我知道LINQ不支持完全外连接)来获取所有记录是否匹配。

为此我使用以下代码片段

征集View1:

var specialRequest = (from specialReq in dc1.View1
                     select specialReq).ToList();

此视图返回多个字段,我需要所有字段。

调用View2并使用View1结果加入

 var SummaryDataLeftOuter = (
    from specialReq in specialRequest
    join summary in dc.View2 on specialReq.inv_item_id equals summary.inv_item_id
    into tempspecialReq
    from summary in tempspecialReq.DefaultIfEmpty()
    select new Summary
        {
            inv_item_id = string.IsNullOrEmpty(specialReq.inv_item_id) ? "" : specialReq.inv_item_id.Contains("NO ITEM NUMBER") ? "NO PART #" : specialReq.inv_item_id,
            description = specialReq.description,
            unit_of_measure = specialReq.unit_of_measure,
            total_onorder_qty = (specialReq.TotalOrder.HasValue ? Convert.ToInt32(specialReq.TotalOrder) : 0) + (summary == null ? 0 : summary.TotalOrder.HasValue ? Convert.ToInt32(summary.TotalOrder) : 0),
            open_order_qty = (specialReq.TotalOpen.HasValue ? Convert.ToInt32(specialReq.TotalOpen) : 0) + (summary == null ? 0 : summary.OpenOrder.HasValue ? Convert.ToInt32(summary.OpenOrder) : 0),
            picked_qty = summary == null ? 0 : summary.PickedQty.HasValue ? Convert.ToInt32(summary.PickedQty) : 0,
            qty_shipped = summary == null ? 0 : summary.qty_shipped.HasValue ? Convert.ToInt32(summary.qty_shipped) : 0,
            EnableLink = string.IsNullOrEmpty(specialReq.inv_item_id) ? false : specialReq.inv_item_id.Contains("NO ITEM NUMBER") ? false : true
        }
).ToList();

更改表格顺序后再次使用加入:

var SummaryDataRightOuter = (
    from summary in dc.View2
    join specialReq in specialRequest on summary.inv_item_id equals specialReq.inv_item_id
    into tempsummary
    from specialReq in tempsummary.DefaultIfEmpty()
    select new Summary
        {
            inv_item_id = string.IsNullOrEmpty(summary.inv_item_id) ? "" : summary.inv_item_id.Contains("NO ITEM NUMBER") ? "NO PART #" : summary.inv_item_id,
            description = summary.descr60,
            unit_of_measure = summary.unit_of_measure,
            total_onorder_qty = specialReq == null ? 0 : (specialReq.TotalOrder.HasValue ? Convert.ToInt32(specialReq.TotalOrder) : 0) + (summary == null ? 0 : summary.TotalOrder.HasValue ? Convert.ToInt32(summary.TotalOrder) : 0),
            open_order_qty = specialReq == null ? 0 : (specialReq.TotalOpen.HasValue ? Convert.ToInt32(specialReq.TotalOpen) : 0) + (summary == null ? 0 : summary.OpenOrder.HasValue ? Convert.ToInt32(summary.OpenOrder) : 0),
            picked_qty = summary == null ? 0 : summary.PickedQty.HasValue ? Convert.ToInt32(summary.PickedQty) : 0,
            qty_shipped = summary == null ? 0 : summary.qty_shipped.HasValue ? Convert.ToInt32(summary.qty_shipped) : 0,
            EnableLink = specialReq == null ? false : string.IsNullOrEmpty(specialReq.inv_item_id) ? false : specialReq.inv_item_id.Contains("NO ITEM NUMBER") ? false : true
        }
);

现在第二次通话我得到以下例外:

  Local sequence cannot be used in LINQ to SQL implementation of query operators except the Contains() operator

我已经在网上搜索了很多,并得到了很多解决方案,所有人都说要使用Contains。但是所有这些例子都给出了第一个列表,即specialRequest只包含一列,例如One example you can check here。但我需要所有专栏。

问题:

如何在具有多个字段的列表中使用Contains()。

1 个答案:

答案 0 :(得分:0)

在我的问题中,您看到我在连接中直接使用view2而未在任何列表中分配它。这是问题的主要原因。

解决方案:

首先将视图结果分配到列表中,然后使用此列表进行进一步处理。