1

抱歉,这可能很明显,但我整个上午都在努力让它工作。

我正在使用 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> ();
4

2 回答 2

1

我认为这是 Linq to Entity?

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

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

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

重新性能:这将在每次迭代时执行一个额外的 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();
于 2012-10-26T12:49:29.017 回答
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);
}
于 2012-10-26T13:47:37.143 回答