我使用两个视图都放在不同的数据库上(在不同的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()。
答案 0 :(得分:0)
在我的问题中,您看到我在连接中直接使用view2而未在任何列表中分配它。这是问题的主要原因。
解决方案:
首先将视图结果分配到列表中,然后使用此列表进行进一步处理。