C# Linq查询重写

C# Linq查询重写,c#,linq,linq-to-entities,iqueryable,C#,Linq,Linq To Entities,Iqueryable,这真的让我难堪 我有两个问题 这个不起作用,有错误, LINQ to Entities无法识别方法GetAllCustomers()'方法,此方法无法转换为存储表达式 现在像这样重写它: results = from p in theDocuments join cust in outletService.GetAllCustomers() on p.customer_id equals cust.id

这真的让我难堪

我有两个问题

这个不起作用,有错误, LINQ to Entities无法识别方法GetAllCustomers()'方法,此方法无法转换为存储表达式

现在像这样重写它:

results = from p in theDocuments
                          join cust in outletService.GetAllCustomers() on p.customer_id equals cust.id
                          select new DocumentModel()
                          {
                              customer_name = cust.name,
                              document_id = p.document_id,
                              document_type = p.document_type,
                              franchisee_id = p.franchisee_id,
                              customer_id = p.customer_id,
                              address = p.address
                          };
我知道这不能转换为它的相关SQL,但是,我不确定第二个查询在执行过程中有什么不同之处,以便它能够正常工作,它是否在执行任何其他操作之前执行GetAllCustomers()?它内部的工作方式有什么不同

如何重写第一个查询以使其正确执行

谢谢, 詹姆斯

**这就是我的结局**

 results = theDocuments.Join(
                    outletService.GetAllCustomers(), docs => docs.customer_id, customers => customers.id, (doc, cust) => new DocumentModel()
                    {
                        document_id = doc.document_id,
                        document_type = doc.document_type,
                        franchisee_id = doc.franchisee_id,
                        customer_id = doc.customer_id,
                        address = doc.address,
                        area_id = doc.area_id,
                        customer_name = cust.name
                    });

第一个尝试将方法转换为SQL方法,第二个尝试在查询中创建联接。在我看来,正确的方法是使用join:)

我是个问题。我找到了解决办法。那可能对你有帮助

            dynamic user = new
            {
                Name = "",
                Surname = ""
            };

            dynamic userModel = new
            {
                Name = "",
                Surname = "",
                FullName = ""
            };

            var query = db.User.AsNoTracking();
            query = query.Select(x => new userModel
            {
                Name = x.Name,
                Surname = x.SurName,
                FullName = $"{x.Name}{x.SurName}",
            }).ToList();
如果您尝试执行此查询。你会撞车的。Linq不支持

全名=$“{x.Name}{x.lasname}”

你必须把这行改成

全名=x.姓名+“”+x.姓氏


join使用
join
方法,这就是不同之处如果您声明了一个变量,如
var Name=outletService.GetAllCustomers()。其中(xx=>xx.id==x.customer\u id)。First().Name
然后在第一次查询中使用它,它就会工作。显然,在将其与lambda expresiontanks一起使用之前,您需要获得该
名称
!我想我要求它做的太多了,因为我希望它知道我加入的事。
            dynamic user = new
            {
                Name = "",
                Surname = ""
            };

            dynamic userModel = new
            {
                Name = "",
                Surname = "",
                FullName = ""
            };

            var query = db.User.AsNoTracking();
            query = query.Select(x => new userModel
            {
                Name = x.Name,
                Surname = x.SurName,
                FullName = $"{x.Name}{x.SurName}",
            }).ToList();