Home > Enterprise >  Linq query without using Joins for two tables distinct value
Linq query without using Joins for two tables distinct value

Time:10-28

Table 1

Contract ID , Vendor Name, Description , user

Table 2

Contract ID , product , department

Match condition : for all the Contract ID matching with table 1 , get their Vendor Name and Contract ID

Query result output : Contract ID(Distinct),Vendor Name

Below code using inner join , need same output without using join as linq query \\

   select table1.Contract ID,table1.Vendor Name ,table2.Contract ID
   from table1 as s1
   inner join table2 as s2
   on s1.Contract ID=s2.Contract ID

\\\

Thanks in Advance

CodePudding user response:

Considering you need only Join alternative to select distinct ,you can use inner query logic like below to write LINQ SELECT contractorid ,vendor name Where Contracterid in (Select distinct contractor id from table2)

Here assumption is contractorId is primary key in table 1

CodePudding user response:

If I understand correctly, you want to retrieve a collection of objects containing Contract Id and Vendor Names, without duplicates, whose Contract Id is found in Table 2.

It is unclear if you are using Linq to objects, Linq to Entities, or any other Linq flavor, which would have a meaningful impact on how to best construct a query for a specific purpose.

But as a first hint, here is a way to perform this without join with Linq:

// Get a list of all distinct Contract Ids in Table 2
var AllTable2ContractIds = Table2
    .Select(e => e.ContractId)
    .Distinct()
    .ToList();

// With Table 1
// Keep only entries whose contract Id is found in the list just contructed above.
// transform it to keep Contract Id and Vendor Name.
// The use of ToList() at the end is not mandatory.
// It depends if you want to materialize the result or not.
var Result = Table1
    .Where(e => AllTable2ContractIds.Contains(e.ContractId))
    .Select(e => new 
    {
        e.ContractId,
        e.VendorName
    })
    .ToList();
  • Related