具有内部联接的SQL数据上下文

时间:2012-10-26 12:33:03

标签: asp.net linq

对不起,这可能是显而易见的,但我整个上午都在努力让这个工作。

我正在使用ASP.net并拥有数据上下文,如下所示。我想要做的是添加一个内部联接并使用公司名称作为搜索参数而不是交易描述,但对于我的生活,我不能这样做。

我想要最终实现的目标是:

SELECT *
FROM Deals
INNER JOIN Companies
ON Deals.CompanyID=Companies.CompanyID

有人可以通过改写下面的内容来帮助我,以获得相同的结果吗?

MobileVocherDataContext db = new MobileVocherDataContext();

List<Deal> dealresult= db.Deals.Where(c=>c.DealDescription.ToLower().Contains(keyword.ToLower()) && c.ExpiredDate.Date>=DateTime.Now.Date && c.Status==true).Skip(_skip).Take(_count).ToList();
List<CustomSearchresult> result = new List<CustomSearchresult> ();

2 个答案:

答案 0 :(得分:1)

我认为这是Linq to Entities?

虽然你应该知道后台发生了什么,但你不必担心在EF中明确加入......除非性能是一个主要问题。

您可以按以下方式遍历dealresult并访问公司:

foreach(var deal in dealresult) {
     var company = deal.Company;
}

Re performance:这将在每次迭代时执行一个额外的SQL语句。您可以使用Include()运算符来解决这个问题(这应该适用于EF5 - 请在以前的版本中查找):

 MobileVocherDataContext db = new MobileVocherDataContext();

 var dealresult = db.Deals
    .Where(d => d.DealDescription.ToLower().Contains(keyword.ToLower())
    && d.ExpiredDate.Date >= DateTime.Now.Date
    && d.Status
    && d.Company.CompanyName == "Keyword")
    .Include(c => c.Company)
    .Skip(_skip)
    .Take(_count)
    .ToList();

答案 1 :(得分:1)

这里有一些愚蠢的数据和一个可以帮助你的例子。

 var Custs = new List<Cust>() { new Cust() {CustId=1, Name="Joe"}, new Cust() {CustId=2, Name="Pete"}, new Cust() {CustId=3, Name="Steve"}};
 var Deals = new List<Deal>() { new Deal() {CustId=1, Name="JoeDeal"}, new Deal() {CustId=1, Name="AnotherJoeDeal"}, new Deal() {CustId=3, Name="SteveDeal"}};

var CustomerDeals = from d in Deals
                     join c in Custs on d.CustId equals c.CustId
                     select d;

foreach (var d in CustomerDeals)
{
    Console.WriteLine(d.Name);
}