LINQ -我需要根据表1中的值从表2中提取记录
本文关键字:记录 提取 LINQ | 更新日期: 2023-09-27 18:12:30
我有2 tables
, table 1
有一个包含公司prefixes
的字段。
需要使用从表1检索到的值来从表2获取记录(基于返回的前缀)。
我在下面写了一个starswith来演示我需要做什么,但是我需要做的是构建一个动态的starswith子句。
我知道下面的代码不会编译,只是把它放在那里显示我想要完成的。
//* This pulls list of prefixes from Table 1
var xrfPrefixes = from xx in XrfPrefixes
select new
{
xxx.CompanyPrefix
};
//* Get list of prefixes
string PrefixList = "";
foreach (var xxx in xrfJobPrefix)
{
PrefixList = PrefixList + xxx.FirmJobPrefix + ",";
}
//* Get back Matching records from table 2
var results = from p in Orders.Where(p => p.OrdCust.StartsWith(PrefixList))
select p;
表1中的样本数据(客户):
- 行1:Customer_Prefix char(50) value = "ab1, ab2"
- 行2:Customer_Prefix char(50) value = "xy1"
- 第3行:Customer_Prefix char(50) value = "xy2"
表2中的样本数据(orders):
- 行1:customer_name char(50) value = "ab1filler"
- 行2:customer_name char(50) value = "ab2filler"
- 第3行:customer_name char(50) value = "ab3filler"
- 第4行:customer_name char(50) value = "xy1filler"
- 第5行:customer_name char(50) value = "xy2filler"
- 第6行:customer_name char(50) value = "xy3filler"
根据Customers表中的customer_prefixes,从Orders表返回的记录将是第1、2、4行&5
-
创建PrefixList。不要将其作为逗号分隔的字符串列表,而要将其作为真正的
List<String>
。这意味着您必须分割逗号分隔的值(例如使用String.Split
):var prefixList = new List<string>(); foreach (var xxx in xrfJobPrefix) { prefixList.AddRange(xxx.FirmJobPrefix.Split(',').Select(pre => pre.Trim())); }
-
有了PrefixList之后,可以执行如下简单的LINQ查询:
var results = from p in orders from pre in prefixList where p.OrdCust.StartsWith(pre)) select p;
看看是否有效:
var items = from o in Orders
where (
from pf in XrfPrefixes
where o.OrdCust.StartsWith(pf.CompanyPrefix)
select pf).Any()
select o;