1

SQL を LINQ に変換する方法がわかりません。次のことをしたいのですが、Group By を機能させる方法がわかりません。

var query = from s in Supplier
            join o in Offers on s.Supp_ID equals o.Supp_ID
            join p in Product on o.Prod_ID equals p.Prod_ID
            where s.City == "Chicago"
            group s by s.City into Results
            select new { Name = Results.Name };

この単純なクエリの製品名を表示するなどの単純なことをする必要があるだけです.group byは結合とどこでどのように機能しますか?

4

3 に答える 3

3

あなたはクラスを提供していないので、以下のようなものだと思いました

    public class Supplier
    {
        public int SupplierID { get; set; }

        public string SuppierName { get; set; }

        public string City { get; set; }
    }


    public class Product
    {
        public int ProductID { get; set; }

        public string ProductName { get; set; }
    }

    public class Offer
    {
        public int SupplierID { get; set; }

        public int ProductID { get; set; }
    }

次に、テスト用のデータを追加しました:

    List<Supplier> supplierList = new List<Supplier>()
                                 {
                                     new Supplier() { SupplierID = 1, SuppierName = "FirstCompany", City = "Chicago"},
                                     new Supplier() { SupplierID = 2, SuppierName = "SecondCompany", City = "Chicago"},
                                     new Supplier() { SupplierID = 3, SuppierName = "ThirdCompany", City = "Chicago"},
                                 };


    List<Product> productList = new List<Product>()
                                {
                                    new Product() { ProductID = 1, ProductName = "FirstProduct" },
                                    new Product() { ProductID = 2, ProductName = "SecondProduct" },
                                    new Product() { ProductID = 3, ProductName = "ThirdProduct" }
                                };

    List<Offer> offerList = new List<Offer>()
                             {
                                 new Offer() { SupplierID = 1, ProductID = 2},
                                 new Offer() { SupplierID = 2, ProductID = 1},
                                 new Offer() { SupplierID = 2, ProductID = 3}
                             };

製品が提供されているサプライヤーの名前を表示する場合、LINQ クエリは次のようになります。

    IEnumerable<string> result = from supplier in supplierList
                                 join offer in offerList on supplier.SupplierID equals offer.SupplierID
                                 join product in productList on offer.ProductID equals product.ProductID
                                 where supplier.City == "Chicago"
                                 group supplier by supplier.SuppierName into g
                                 select g.Key;

正しい名前が選択されているかどうかを確認できます。

    foreach (string supplierName in result)
    {
        Console.WriteLine(supplierName);
    }

次の結果が得られる必要があります。

ファーストカンパニー

セカンドカンパニー

于 2013-04-19T05:43:34.393 に答える
0

これを試すことができます:

   var query = from s in Supplier
                    join o in Offers on s.Supp_ID equals o.Supp_ID
                    join p in Product on o.Prod_ID equals p.Prod_ID
                    where s.City == "Chicago"
                    group s 
                    by new {s.City, s.Name} //added this
                    into Results
                    select new { Name = Results.Key.Name };
于 2013-04-19T05:55:43.123 に答える
0

s(サプライヤー) を でグループ化しs.Cityます。この結果はIGrouping<City, Supplier>. つまり、グループ化の後で到達できる範囲内にあるだけです。各都市について、そのサプライヤーの 1 つを取得しますCity(ちなみに、結合によって乗算されます)。SupplierIEnumerable<Supplier>

where s.City == "Chicago"都市ごとにグループ化する条件もあるため、役に立ちません。都市は 1 つしかありません。だから私はあなたがこのようなことをしたほうがいいと思う:

from s in Supplier
join o in Offers on s.Supp_ID equals o.Supp_ID
join p in Product on o.Prod_ID equals p.Prod_ID
where s.City == "Chicago"
select new { 
                City = s.City.Name, 
                Supplier = s.Name,
                Product = p.Name,
                ...
            };
于 2013-04-19T20:01:11.213 に答える