C# LINQ Join多次只给出第一个结果

C# LINQ Join多次只给出第一个结果,c#,linq,C#,Linq,我有这样的想法: 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

我有这样的想法:

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();

这段代码多次返回第一个linq结果?我错过了什么?谢谢。

您应该使用
SingleOrDefault
/
Single
,而不是
Where
——这实际上会将一行返回到
mycust
变量中

如果未找到此类客户,
SingleOrDefault
将在变量中放入一个
null
(假设
Customer
是一个引用类型-如果它是一个值类型,它将是该类型的默认值)<如果找不到任何项目或找到多个项目,code>Single将引发异常,这对于查找数据中的错误(例如重复的客户记录)非常有用


此外,您的
ip
表可能有多条与客户匹配的记录-这就是为什么您会看到从
select
返回多条记录的原因

您应该使用
SingleOrDefault
/
Single
,而不是
Where
——这实际上会将一行返回到
mycust
变量中

如果未找到此类客户,
SingleOrDefault
将在变量中放入一个
null
(假设
Customer
是一个引用类型-如果它是一个值类型,它将是该类型的默认值)<如果找不到任何项目或找到多个项目,code>Single将引发异常,这对于查找数据中的错误(例如重复的客户记录)非常有用


此外,您的
ip
表可能有多条与客户匹配的记录-这就是为什么您会看到从
select
返回多条记录的原因

您收到多条重复记录,然后尝试以下要求

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(); var mycust=db.CUSTOMER.Where(x=>x.NAME.Contains(nameid)).ToList(); var CancCustomer=(来自myCust中的cust) 将ip加入cust.ID上的db.IPS等于ip.CUSTOMER\u ID 选择newjoinobj{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(); 另一种方法是多条记录,然后在下面的查询中得到一条记录

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(); var mycust=db.CUSTOMER.Where(x=>x.NAME.Contains(nameid)).ToList(); var CancCustomer=(来自myCust中的cust) 将ip加入must.ID上的db.IPS等于ip.CUSTOMER\u ID 选择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();
您收到多条重复记录,然后尝试以下要求

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(); var mycust=db.CUSTOMER.Where(x=>x.NAME.Contains(nameid)).ToList(); var CancCustomer=(来自myCust中的cust) 将ip加入cust.ID上的db.IPS等于ip.CUSTOMER\u ID 选择newjoinobj{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(); 另一种方法是多条记录,然后在下面的查询中得到一条记录

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(); var mycust=db.CUSTOMER.Where(x=>x.NAME.Contains(nameid)).ToList(); var CancCustomer=(来自myCust中的cust) 将ip加入must.ID上的db.IPS等于ip.CUSTOMER\u ID 选择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();
但我不想要单一的结果。我需要该连接的所有结果。这将返回该连接的所有结果-我只是说您想排除获取多个客户记录的可能性。您还可以从ip表中选择特定信息-您是否在数据库中检查这些信息是否确实与您的客户不同?可能是没有什么问题-数据确实是相同的(对于
选择中的位),但我不想要单一结果。我需要该连接的所有结果。这将返回该连接的所有结果-我只是说您想排除获取多个客户记录的可能性。您还可以从ip表中选择特定信息-您是否在数据库中检查这些信息是否确实与您的客户不同?可能是没有什么问题-数据确实相同(对于
select
中的位)。所选结果中的
cust.ID
是否不同?所选结果中的
cust.ID
是否不同?