LINQ - テーブル1の値に基づいてテーブル2からレコードを取得する必要があります

私は 2つのテーブルを持ち、テーブル1 には企業のプレフィックスを含むフィールドがあります。

表1から検索された値は、(返された接頭部に基づいて)表2からレコードを取得するために使用する必要があります。

私は以下のコードを実行して、必要なものをデモするためのスタートアップを行いましたが、私は動的な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のサンプルデータ(注文):

  • 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"

Based on the customer_prefixes in the Customers table, the records from Orders Table returned would be Rows 1,2,4 & 5

1
少なくとも必要なものを達成するために必要なプレーンなT-SQLが必要です。
追加された 著者 balexandre,
あなたのコードは私を混乱させました...サンプルデータを表示し、結果が期待されるものがあれば、より役に立ちます。
追加された 著者 Jon Skeet,

2 答え

  1. Create a PrefixList. Don't do it as a list of comma-separated strings, do it as a real List. That means you have to split comma-separated values (using String.Split, for example):

    var prefixList = new List();
    foreach (var xxx in xrfJobPrefix) 
    { 
        prefixList.AddRange(xxx.FirmJobPrefix.Split(',').Select(pre => pre.Trim())); 
    } 
    
  2. After you have a PrefixList, you can do a simple LINQ query as follows:

    var results = from p in orders
                  from pre in prefixList
                  where p.OrdCust.StartsWith(pre)) 
                  select p;
    
1
追加された
しかし、これはうまく実行されます:results.Dump();エラーが表示されます。ローカルシーケンスは、Contains演算子以外のクエリ演算子のLINQ to SQL実装では使用できません。このエラーを今調査中です。
追加された 著者 DanO,

これが機能するかどうかを確認する:

        var items = from o in Orders
                    where (
                        from pf in XrfPrefixes
                        where o.OrdCust.StartsWith(pf.CompanyPrefix)
                        select pf).Any()
                    select o;
1
追加された