我在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语句?
答案 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;