2014-10-29 2 views
1

Хей, у меня проблема с выражением linq. Я хотел бы выполнить соединение с группами некоторого набора. Это поясню, что мне нужно:linq присоединиться к группам

var f = new IEnumerable<SomeClass> { ... }; 
var rows = new IEnumerable<SomeOtherClass> { ... }; 
var makedGroups = rows.GroupBy(row => row.SomeId); 
var groupsJoined = (from row in makedGroups 
    join allocQuant in f on row.Key.Value equals allocQuant.SomeId into gj 
    select gr => new { Count = gr.Count(), Group = gj }); 

ошибка: Ошибка 202 Тип одного из выражений в предложении присоединиться к неверен. Ошибка ввода типа в вызове «Join».

Как правильно написать это выражение?

+1

Что вы ищете, это GroupJoin. Подумайте об этом [post] (http://stackoverflow.com/a/15599143/1039635) –

+0

Привет, если вы нашли ответ полезным, возможно, признав его ответом? –

ответ

2

Я включил пример кода, который делает то, что вы пытаетесь сделать. Он адаптирован из некоторого примера кода для использования двух классов, а не для статического массива строк.

В результате появится IEnumerable с полем ProductCategory, поле Products, которое содержит группировки продуктов на основе категории, а последний столбец - это счет в группе.

От того, что вы просили, это то, что, как я думал, вы хотели.

class Product 
{ 

    public Product(string cat, string name) 
    { 
     Category = cat; 
     ProductName = name; 
    } 

    public string Category { get; set;} 
    public string ProductName { get;set;} 
} 


class ProductClass 
{ 
    public ProductClass (string type) 
    { 
     ProductType = type; 
    } 

    public string ProductType { get;set;} 
} 

ProductClass[] productClasses = new ProductClass[]{ 
    new ProductClass("Beverages"), 
    new ProductClass("Condiments"), 
    new ProductClass("Vegetables"), 
    new ProductClass("Dairy Products"), 
    new ProductClass("Seafood") }; 

List<Product> products = new List<Product>(); 
products.Add(new Product("Seafood", "crab sticks")); 
products.Add(new Product("Seafood", "lobster")); 
products.Add(new Product("Vegetables", "cucumber")); 
products.Add(new Product("Seafood", "oysters")); 
products.Add(new Product("Condiments", "pepper")); 
products.Add(new Product("Condiments", "salt")); 

var query = 
    from pc in productClasses 
    join product in products on pc.ProductType equals product.Category into gj 
    select new { ProductCategory= pc.ProductType, Products = gj, Count = gj.Count() }; 
+0

Ваш ответ и Юрий Христюк полезны, я заметил, что я просто сделал плохой запрос с неправильным порядком. – Puchacz