我正在构建一个LINQ查询,该查询将附加到'其中'部分(这些比较的数量取决于用户的选择)。
在代码隐藏中,我想要这样的东西:
var builtQuery =
from q in dc.Leads
join sr in dc.SalesReps on q.SalesRepID equals sr.SalesRepID
join co in dc.Companies on q.CompanyID equals co.CompanyID
join or in dc.Origins on q.OriginID equals or.OriginID
join pr in dc.Products on q.ProductID equals pr.ProductID
where
在这里,来自'来自'和'选择'部分,我将添加一些比较(取决于用户选择的复选框)。
最后:
select new { q.Ref, sr.Rep, q.Deposit, q.Sale, q.Title, q.Names, q.Surname, q.HomePhone, q.WorkPhone, q.Mobile, q.Address, q.Suburb, q.County, q.Postcode, co.CompanyName, or.OriginName, pr.ProductName, q.Telemarket, q.Entered };
在PHP(使用MySQL)中,我可以简单地连接构成查询的许多字符串。但是,在c#/ LINQ To SQL中,查询不是一个字符串,所以我不知道如何做到这一点......在SO上有几个类似的问题,但它们并不完全相同。< / p>
任何想法??
谢谢!
答案 0 :(得分:3)
我会按以下方式进行
var intermediateQuery=
from q in dc.Leads
join sr in dc.SalesReps on q.SalesRepID equals sr.SalesRepID
join co in dc.Companies on q.CompanyID equals co.CompanyID
join or in dc.Origins on q.OriginID equals or.OriginID
join pr in dc.Products on q.ProductID equals pr.ProductID
select new { q.Ref, sr.Rep, q.Deposit, q.Sale, q.Title, q.Names, q.Surname, q.HomePhone, q.WorkPhone, q.Mobile, q.Address, q.Suburb, q.County, q.Postcode, co.CompanyName, or.OriginName, pr.ProductName, q.Telemarket, q.Entered };
然后根据用户输入添加一些过滤器
if(SomeUserProductFilter)
{
var result = intermediateQuery.Where(p=>p.ProductName = 'UserProductName');
}
不要害怕这种方法会检索所有数据,而不是在内存中过滤它。 LINQ仅在您调用ToList(),ToArray()或在foreach循环中使用结果时才向数据库发送查询