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

LINQ -我需要根据表1中的值从表2中提取记录

  1. 创建PrefixList。不要将其作为逗号分隔的字符串列表,而要将其作为真正的List<String>。这意味着您必须分割逗号分隔的值(例如使用String.Split):

    var prefixList = new List<string>();
    foreach (var xxx in xrfJobPrefix) 
    { 
        prefixList.AddRange(xxx.FirmJobPrefix.Split(',').Select(pre => pre.Trim())); 
    } 
    
  2. 有了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;