0

在应用程序中,我需要显示每个状态(来自)的客户、产品、{在此处插入其他实体}(来自、等)的数量(计数)。db.Custmersdb.Productsdb.Geodata

结果可能看起来像

Customers: { Status = "OK", Count = 59 }
           { Status = "INVALID", Count = 14 }
           { Status = "NO_RESULT", Count = 29 }

Products:  { Status = "OK", Count = 541 }
           { Status = "INVALID", Count = 33 }
           { Status = "NO_RESULT", Count = 42 }

所以我写了一个查询......

from customer in db.Kunden
join pin in db.Geodata
    on customer.AdressNr equals pin.AdressNr
group customer by pin.Status
into groups
select new {Status = groups.Key, Count = groups.Count()};

还有一个……

from product in db.Products
join pin in db.Geodata
    on product.AdressNr equals pin.AdressNr
group product by pin.Status
into groups
select new {Status = groups.Key, Count = groups.Count()};

还有更多。他们工作得很好。但是我正在努力将它们全部集成到一个查询中(从而合并重复的部分,即最后两行)。

我怎样才能做到这一点?

编辑:谁能帮我改进这个问题?是否缺少任何关键信息?这是太本地化了,还是太宽泛了?

4

1 回答 1

0

即使现在可能为时已晚,它也可能对您有所帮助。

LINQ 的设计并未像在 SQL 中那样构建其语句,而您可能会在其中使用StringBuilder或类似的东西。

LINQ 优于 SQL 的优点是在编码时进行编译时检查。在 SQL 中,您必须运行代码并进行反复试验。

但是,在您提出问题 5 个月后,我发现了一个类似的问题:https ://stackoverflow.com/a/13797168 。

采用这种方法,您可能会得到以下内容:

public object[] GetCustomers()
{
    return GetEntityCount("Customers");
}

private object[] GetEntityCount(string entityName)
{
    return (from obj in GetSpecificEntity(entityName) join pin ...).ToArray();
}

private IEnumerable GetSpecificEntity(string entityName)
{
    switch (entityName)
    {
        case "Customers": return db.Customers;
    }
}
于 2013-07-25T10:00:25.760 回答