Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试在查询语法和Lambda中进行左连接,结果是“未实现该方法或操作”_C#_Linq_Lambda - Fatal编程技术网

C# 尝试在查询语法和Lambda中进行左连接,结果是“未实现该方法或操作”

C# 尝试在查询语法和Lambda中进行左连接,结果是“未实现该方法或操作”,c#,linq,lambda,C#,Linq,Lambda,我尝试用两种不同的方式编写此查询,但无论我如何编写,都无法实现连接。它只是不断地抛出方法或操作未实现。看着我。在SQL中,我试图做的很简单:从下面的表a-Customer中获取项目列表,而在下面的表B-SalesReps中没有相应的列表 拉姆达: var customers = _sms.CurrentSession.Query<customer>() .GroupJoin(_sms.CurrentSession.Query<salesReps>(

我尝试用两种不同的方式编写此查询,但无论我如何编写,都无法实现连接。它只是不断地抛出方法或操作未实现。看着我。在SQL中,我试图做的很简单:从下面的表a-Customer中获取项目列表,而在下面的表B-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是完全独立的——它是一个交叉引用表。