C# 尝试在查询语法和Lambda中进行左连接,结果是“未实现该方法或操作”
我尝试用两种不同的方式编写此查询,但无论我如何编写,都无法实现连接。它只是不断地抛出方法或操作未实现。看着我。在SQL中,我试图做的很简单:从下面的表a-Customer中获取项目列表,而在下面的表B-SalesReps中没有相应的列表 拉姆达:C# 尝试在查询语法和Lambda中进行左连接,结果是“未实现该方法或操作”,c#,linq,lambda,C#,Linq,Lambda,我尝试用两种不同的方式编写此查询,但无论我如何编写,都无法实现连接。它只是不断地抛出方法或操作未实现。看着我。在SQL中,我试图做的很简单:从下面的表a-Customer中获取项目列表,而在下面的表B-SalesReps中没有相应的列表 拉姆达: var customers = _sms.CurrentSession.Query<customer>() .GroupJoin(_sms.CurrentSession.Query<salesReps>(
var customers =
_sms.CurrentSession.Query<customer>()
.GroupJoin(_sms.CurrentSession.Query<salesReps>(),
c => c.Id,
sr => sr.CustomerId,
(x, y) => new {c = x, sr = y})
.SelectMany(xy => xy.sr.DefaultIfEmpty(),
(x, y) => new {c = x.c, sr = y})
.Where(data => data.sr.SalesRepId == null)
.Select(data => new CustomerDTO
{
Id = data.c.Id,
FullName = data.c.FirstName + " " + data.c.LastName,
FirstName = data.c.FirstName,
LastName = data.c.LastName
});
var custList = customers .ToList();
尝试的查询语法:
var customers = from c in _sms.CurrentSession.Query<customer>()
join sr in _sms.CurrentSession.Query<salesReps>()
on c.Id equals sr.CustomerId
into joinedData
from jd in joinedData.DefaultIfEmpty()
where c.IsEmployee == false
&& c.CustomerOptions.Company.Id == companyGuid
&& jd.SalesRepId == null
select
new CustomerDTO
{
Id = c.Id,
FullName = c.FirstName + " " + c.LastName,
FirstName = c.FirstName,
LastName = c.LastName
};
var custList = customers .ToList();
我得到的印象是,问题在于检查空的销售代表,但我不确定。您不能只检查SalesRep属性对象是否为空吗?如果为null,则访问data.sr.SalesRepId==null将失败,因为data.sr为null,并且您无法访问null object的属性。我将Where子句全部注释掉,并且仍然会出现相同的错误。。。也许试图把所有东西都塞进DTO就是失败的地方?我想的更多的是_sms.CurrentSession.Query.where c=>c.SalesRep==null。您是否将SalesRep映射到客户?这就是我们对像NHibernate这样的ORM所做的。问题是客户已经是一个巨大的对象,而SalesRep是完全独立的——它是一个交叉引用表。