简体   繁体   中英

LINQ Join gives only first result multiple times

I have this Join :

var mycust= db.CUSTOMER.Where(x => x.NAME.Contains(nameid)).ToList();

var CancCustomer = (from cust in myCust
                    join ip in db.IPS on must.ID equals ip.CUSTOMER_ID                              
                    select new JoinObj {ID = cust.ID, NAME = cust.NAME, LASTNAME = cust.LASTNAME, 
                                        TYPE_ID = ip.TYPE_ID, TYPE2_ID = ip.TYPE2_ID,
                                        SERVICE_ID = ip.SERVICE_ID , REASON = ip.REASON }).ToList();

This code returns the first linq result multiple times? What am I missing? Thanks.

Instead of Where , you should use SingleOrDefault / Single - these would indeed return a single row into your mycust variable.

SingleOrDefault would put a null into the variable if no such customers were found (and assuming a Customer is a reference type - if it were a value type, it would be the default value for the type). Single would throw an exception if no items were found or more than one were found, which could be very useful in finding errors in your data (such as duplicate customer records).

Additionally, it is likely your ip table has multiple matching records for a customer - which is why you would be seeing multiple records being returned from your select .

You have multiple Duplicate Record received Then Try For following quires

var mycust= db.CUSTOMER.Where(x => x.NAME.Contains(nameid)).ToList();

var CancCustomer = (from cust in myCust
                    join ip in db.IPS on cust.ID equals ip.CUSTOMER_ID                              
                    select new JoinObj {ID = cust.ID, NAME = cust.NAME, ASTNAME=cust.LASTNAME, TYPE_ID = ip.TYPE_ID, TYPE2_ID = ip.TYPE2_ID, SERVICE_ID = ip.SERVICE_ID , REASON = ip.REASON }).distinct().ToList();

Other Wise Multiple record then You Get One Record for You following Query

var mycust= db.CUSTOMER.Where(x => x.NAME.Contains(nameid)).ToList();

var CancCustomer = (from cust in myCust
                    join ip in db.IPS on must.ID equals ip.CUSTOMER_ID                              
                    select new JoinObj {ID = cust.ID, NAME = cust.NAME, LASTNAME = cust.LASTNAME, TYPE_ID = ip.TYPE_ID, TYPE2_ID = ip.TYPE2_ID, SERVICE_ID = ip.SERVICE_ID , REASON = ip.REASON }).distinct().FirstOrDefault();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM