2011-06-15 51 views
4

在选择组加入我这个MS-SQL语句:C#LINQ的选择由

SELECT cv.id FROM ContactValue cv 
INNER JOIN (
     SELECT mainId, max(version) as v 
     FROM ContactValue 
     WHERE version <= $Version(int) 
     GROUP BY mainId 
) 
AS t ON t.mainId = cv.mainId AND t.v = cv.version 
WHERE cv.contact_id = $ContactID(int) 
     AND cv.isActive = 1 
     ORDER BY sort' 

,并想使它在LINQ。 我做了上面的查询,分成多个查询,女巫性能不是很快。 它存在不存在任何的LINQ to LINQ加入

我的C#代码:

  var groupMax = from cv in db.ContactValue 
          where cv.contact_id == ContactID && cv.version <= Version 
          orderby cv.sort 
          group cv by cv.mainId into gcv 
          select new { mainID = gcv.Key, version = gcv.Max(cv => cv.version) }; 

      foreach (var data in groupMax.ToList()) 
      { 
       var Query = from cv in db.ContactValue 
          where cv.contact_id == ContactID && cv.mainId == data.mainID && cv.version == data.version && cv.isActive == true 
          select cv; 

       if (Query.Count() > 0) 
       { 
        ContactValue tmp = Query.First(); 
       } 
      } 

我很想拿到1-2的所有联系人查询没有1个查询,然后为每个联系人另一查询...

请帮帮我!

回答

7

是,LINQ到SQL确实有一个内连接来实现:

var groupMax = 
    from cv in db.ContactValue 
    where cv.contact_id == ContactID && cv.version <= Version 
    orderby cv.sort 
    group cv by cv.mainId into gcv 
    select new { mainID = gcv.Key, version = gcv.Max(cv => cv.version) }; 

var res = 
    from cv in db.ContactValue 
    join gm in groupMax on cv.version equals gm.version 
    where cv.contact_id == ContactID && cv.isActive 
    orderby cv.version ascending /*for example*/ 
    select cv 
+0

谢谢它的作品,我只是改变加入通用汽车在groupMax新{ cv.mainId,cv.version}等于new {gm.mainId,gm.version},因为我需要使用多个条件连接...更好,那么我在同时使用的是:ExecuteStoreQuery (sqlQuery); – Illusion 2011-06-15 12:39:30

1

保护无效rptPriceRachiveBind() {

 using (MyEntities ctx = new MyEntities()) 
     { 


      var catRef = Convert.ToInt32(Request.QueryString["CategoryRef"]); 
      var prodCounts = (
      from A in ctx.Products 
      join B in ctx.ProductPrices 
       on A.ProductId equals B.ProductRef 
      where A.CategoryRef == catRef 

      group A by new { A.Name,B.ProductRef } into catGp 

      select 
       new 
       { 
       catGp.Key.ProductRef, 
        catGp.Key.Name, 
        proIdCount = catGp.Count() 

       }).ToList(); 

       Repeater1.DataSource = prodCounts; 

      Repeater1.DataBind(); 
     }