2012-07-26 46 views
0

在一个应用程序中,我需要显示客户,产品的编号(计数) {从此处插入其他实体} db.Custmers,db.Products等)每个状态(来自db.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()}; 

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

我该如何做到这一点?

编辑:任何人都可以帮助我改善这个问题吗?是否缺少关键信息?这是太局部还是太宽?

回答

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; 
    } 
} 
相关问题