LINQ Присоединиться с несколькими предложениями Where - PullRequest
2 голосов
/ 02 сентября 2010

Я снова изо всех сил, поэтому любая помощь будет с благодарностью получена.

У меня есть следующий 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.

Sup1 Live (или все столбцы в tblPurchases, только сгруппированные / отдельные)

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

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

1 Ответ

2 голосов
/ 02 сентября 2010

Следующий запрос 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)
                                });
...