当列表有多个字段时使用Contains
本文关键字:Contains 字段 列表 | 更新日期: 2023-09-27 18:19:00
我使用两个视图,它们都放置在不同的数据库(在不同的服务器上)。我从两者获得记录,我必须在LINQ中使用完整的外部连接功能(我知道LINQ不支持完整的外部连接)来获取所有记录,无论它们是否匹配。
为此,我使用以下代码片段
调用View1:
var specialRequest = (from specialReq in dc1.View1
select specialReq).ToList();
这个视图返回多个字段,我需要所有的字段。
Call for View2 and Join with View1 result:
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();
更改表顺序后再次使用Join:
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
我已经在网上搜索了很多,得到了很多解决方案,他们都说使用包含。但他们都给出了一个例子,其中第一个列表,即specialRequest只包含一列,例如一个例子,你可以在这里检查。但是我需要所有的列
问题:
当列表有多个字段时如何使用Contains()。
在我的问题中,你看到我直接在join中使用view2,而不将其分配到任何列表中。这就是问题的主要原因。
解决方案:
首先将视图结果赋值到列表中,然后使用该列表进行进一步处理。