2010-09-02 3 views
2

Я снова борюсь, поэтому любая помощь будет с благодарностью воспринята.LINQ Join With Multiple Where Section

У меня есть следующий LINQ, что отодвигается список данных:

public static List<tblWeight> GetWeights(string memberid, string locationid, string buyer, string subcategory, string product) 
     { 

      MyEntity getweights = new MyEntity(); 

      var r = (from p in getweights.tblWeights 
        where p.MemberId == memberid && 
           p.LocationId == locationid 
        select p); 

      if (buyer != "Not Specified") 
       r = r.Where(p => p.UnitUserField1 == buyer); 

      if (subcategory != "Not Specified") 
       r = r.Where(p => p.UnitUserField2 == subcategory); 

      if (product != "Not Specified") 
       r = r.Where(p => p.IDDesc == product); 

      return r.ToList(); 
     } 

симпатично!

Теперь я хотел бы сделать это на основе этого набора результатов и идентификаторов устройств (IDDesc), затем перейдите в tblPurchase, оттяните несколько столбцов из tblPurchases и сгруппируйте столбцы.

Так, например, мы имеем tblWeight глядя, как так:

MemberID LocationID Buyer SubCategory IDDesc 
1   1   Cat1 Sub1  ab 
1   1   Cat1 Sub1  abc 
1   1   Cat1 Sub2  abcd 

Пользователь делает поиск по SUB1 в подкатегории и выше LINQ делает трюк и тянет назад первые две строки сверху. Хорошо.

Что мне нужно LINQ, чтобы сделать сейчас, чтобы перейти к tblPurchases:

MemberID LocationID IDDesc SupplierID SupplierStatus 
1   1   ab  Sup1   Live 
1   1   abc  Sup1   Live 
1   1   abcd  Sup2   Dead 

А затем оттянуть следующий результат поэтому он присоединился на MemberID, LocationID и IDDesc, но только выбирает tblPurchases.

ПОД1 Live (или все столбцы в tblPurchases, просто сгруппированы/различны)

Я пытался добавить в объединении и на, но независимо от того, сколько различных вариантов, я до сих пор попадались красной волнистой линией гибели! !!

Если кто-то может помочь, пиво/поцелуй снова предлагается.

+0

Запрет на ошибку человека в самом столе, что никогда не должно происходить. У поставщиков всегда будет особый индивидуальный статус. –

ответ

2

Следующий запрос LINQ должен делать то, что вы хотите:

var result = from w in tblWeight 
      where w.SubCategory == "Sub1" 
      join p in tblPurchases on 
       new { w.MemberID, w.LocationID, w.IDDesc } equals 
       new { p.MemberID, p.LocationID, p.IDDesc } 
      group p by new { p.SupplierID, p.SupplierStatus } into pg 
      select pg.Key; 

Переменная result представляет собой список, содержащий кортежи SupplierID и SupplierStatus.

Если вы также хотите разместить условные части там, это становится немного сложнее. Вот как это делается:

var weights = from w in tblWeight 
       select w; 
weights = weights.Where(w => w.SubCategory == "Sub1"); 
// You can add additional where clauses here. 

// Now join with tblPurchases and group by SupplierID and SupplierStatus. 
var result = 
    weights.Join(tblPurchases, 
       w => new { w.MemberID, w.LocationID, w.IDDesc }, 
       p => new { p.MemberID, p.LocationID, p.IDDesc }, 
       (w, p) => p) 
      .GroupBy(p => new { p.SupplierID, p.SupplierStatus }, 
        (k, ps) => new 
           { 
            k.SupplierID, 
            k.SupplierStatus, 
            TotalQty = ps.Sum(p => p.PurchaseQty) 
           }); 
+0

Спасибо за то, что посмотрели на это для меня Рональд. Я с оптимизмом смотрю на «еще» часть вашего ответа. это условие, когда часть, которая действительно бросила меня. –

+0

Я добавил дополнительный материал, который позволяет вам выполнить условие, где (ы), а также присоединиться и сгруппировать. Я пропущу поцелуи, но оставлю ли я вам адрес, чтобы отправить пиво;) –

+0

* Вставьте сюда казни * Я бы никогда не приблизился к этому! Гений Рональд ... если он работает;) Спасибо, что посмотрели на это для меня. –