在LINQ(内部联接)中有一个查询想要它

时间:2017-05-14 14:22:06

标签: c# sql linq

我在C#中将查询转换为LINQ时出现问题,这是我的查询

select PDF.Name,PDF.Name
from PDF inner join PC
on PDF.Id=PC.Ref_PDF
having pc.Ref_Customer=_id

你应该知道 _id 是我发送给我的方法所以我可以找到它的东西

到目前为止,我做了这个我认为不会起作用的事情(很快就会出现错误)

  

无效的表达式术语'选择'

  

预期的上下文关键字'等于'

在这里结束join p in Context.PDFs on c.Ref_PDF

     internal List<EF_Model.PDF> Customers_File(int _id)
           {
               using (var Context = new EF_Model.CoolerEntities())
                  {
                    var q = from c in Context.PCs
                            where c.Ref_Customer == _id
                            join p in Context.PDFs on c.Ref_PDF
                            select new { c.PDF.Id, c.PDF.Name, c.PDF.File };
                    return q;
                  }
           }

我们怎样才能把它变成一个linq语句?

3 个答案:

答案 0 :(得分:2)

这应该为你做的工作

from pc in context.PCs where pc.Ref_Customer == _id
join p in context.PDFs on pc.Ref_PDF equals p.Ref_PDF
select new {pc.PDF.Id, pc.PDF.Name, pc.PDF.File }

可能当你说错误时,我假设你看到了语法错误

答案 1 :(得分:2)

修复查询的语法

List<EF_Model.PDF> Customers_File(int _id) {
    using (var Context = new EF_Model.CoolerEntities()) {
        var q = from c in Context.PCs
                join p in Context.PDFs on c.Ref_PDF equals p.Id
                where c.Ref_Customer == _id
                select new EF_Model.PDF { Id = c.PDF.Id, Name = c.PDF.Name, File = c.PDF.File };
        return q.ToList();
    }
}

并且该方法需要返回一个列表,因此在从该方法返回时对查询使用ToList()

更新:

如果只是为了返回PDF模型,则无需创建匿名对象,只需返回c.PDF

List<EF_Model.PDF> Customers_File(int _id) {
    using (var Context = new EF_Model.CoolerEntities()) {
        var q = from c in Context.PCs
                join p in Context.PDFs on c.Ref_PDF equals p.Id
                where c.Ref_Customer == _id
                select c.PDF;
        return q.ToList();
    }
}

答案 2 :(得分:2)

如果您设置了导航属性,则查询为:

var q =
  from pc in Context.PCs
  where pc.Ref_Customer == _id
  from pdf in pc.PDFs
  select pdf;

如果你没有:

var q =
  from pc in Context.PCs
  where pc.Ref_Customer == _id
  join pdf in Context.PDFs on pc.Ref_PDF equals pdf.Id
  select pdf;

要了解连接语法的主要内容,它的格式为

&#34;加入(a) (b) (c)等于(d)&#34;

  • (a): (b)成员的新范围变量
  • (b):您要加入的项目来源 - 加入的右侧。
  • (c):一个表达式,其中来自联接左侧的项目在范围内。
  • (d):一个表达式,其中来自联接右侧的项目在范围内 - (a)。