LINQ - Ik moet records uit tabel 2 ophalen op basis van waarden in tabel 1

Ik heb 2 tabellen , tabel 1 heeft een veld met voorvoegsels voor bedrijven.

De waarden die zijn opgehaald uit tabel 1 moeten worden gebruikt om records uit tabel 2 te halen (op basis van de teruggezonden prefixen).

Ik heb hieronder gecodeerd om een ​​begin te maken met een demo van wat ik moet doen, maar wat ik moet doen is een dynamische starswith-component maken.

Ik weet dat de onderstaande code niet zal worden gecompileerd, gewoon om het te laten zien wat ik zou willen bereiken.

//*   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;

Voorbeeldgegevens in tabel 1 (klanten):

  • Rij 1: Customer_Prefix char (50) value = "ab1, ab2"
  • Rij 2: Customer_Prefix char (50) value = "xy1"
  • Rij 3: Customer_Prefix char (50) value = "xy2"

Voorbeeldgegevens in tabel 2 (bestellingen):

  • rij 1: klantnaam char (50) value = "ab1filler"
  • rij 2: klantnaam char (50) value = "ab2filler"
  • rij 3: klantnaam char (50) value = "ab3filler"
  • rij 4: klantnaam char (50) value = "xy1filler"
  • rij 5: klantnaam char (50) value = "xy2filler"
  • rij 6: klantnaam 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
of op zijn minst de duidelijke T-SQL die je zou doen om te bereiken wat je nodig hebt.
toegevoegd de auteur balexandre, de bron
Uw code heeft me in de war gebracht ... het zou handiger zijn als u wat voorbeeldgegevens zou kunnen tonen en wat u zou verwachten dat het resultaat zou zijn.
toegevoegd de auteur Jon Skeet, de bron

2 antwoord

  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
toegevoegd
Dit ging prima, maar als ik erin stopte: results.Dump (); Ik ontvang de foutmelding: Lokale volgorde kan niet worden gebruikt in LINQ-naar-SQL-implementaties van query-operators, met uitzondering van de operator Contains. Deze fout wordt nu onderzocht.
toegevoegd de auteur DanO, de bron

Kijk of dit werkt:

        var items = from o in Orders
                    where (
                        from pf in XrfPrefixes
                        where o.OrdCust.StartsWith(pf.CompanyPrefix)
                        select pf).Any()
                    select o;
1
toegevoegd