2009-05-20 29 views
3

我有一个“单”表有些以下结构(除去不必要的列)使用Linq的数据库表中唯一字符串的列表?

 
int | string | int | 
ID | Window | Count | 
------------------------ 
0 | Internet | 10 | 
1 | Phone | 20 | 
2 | Fax  | 15 | 
3 | Fax  | 10 | 
4 | Internet | 5  | 
. | .  | .  | 
. | .  | .  | 

我已映射该表的一类“机票”。所以我可以得到这样的所有记录:

 
var tickets = from t in db.Tickets 
       select t; 

现在我需要获取表中唯一窗口名称的列表。对于上面的表格,列表看起来是这样的:

  • 互联网
  • 电话
  • 传真

反正没有提取所有记录并遍历他们创造这个名单?

我正在使用SQL Server 2008快速版。

编辑: 谢谢你的答案家伙就解决了上述问题。只是贪心,但有没有办法得到每个窗口的总数。例如:

  • 互联网= 15
  • 手机= 25
  • 传真= 20
+0

如果没有更多的数据库端魔术(查找表,触发器等) - 数据库将需要以跨它们应用的不同来获取整个列表。下面的答案是正确的,只需注意数据库仍然会扫描整个表/索引。 – TheSoftwareJedi 2009-05-20 11:12:19

+0

数据库会,但.NET代码不会获取所有记录并在本地迭代它们,这是我怀疑Hemant担心的。 – 2009-05-20 11:30:01

回答

10

如何:

var tickets = db.Tickets.Select(t => t.Window).Distinct(); 

我宁愿是只使用查询表达式时,我做的一个以上的操作,但如果你喜欢他们的等价物是:

var tickets = (from t in db.Tickets 
       select t.Window).Distinct(); 

为了得到计数,你需要组:

var tickets = from t in db.Tickets 
       group t by t.Window into grouped 
       select new { Window=grouped.Key, 
          Total=grouped.Sum(x => x.Count) }; 

foreach (var entry in tickets) 
{ 
    Console.WriteLine("{0}: {1}", entry.Window, entry.Total); 
} 

请注意,这应该都在数据库端执行 - 检查SQL查询来检查这一点。

1

Linq Samples Part 11由比尔·瓦格纳应该帮助你。只需调用Linq结果中的Distinct()函数即可。就这么简单。

var tickets = (from t in db.Tickets 
       select t).Distinct(); 

[编辑]

Concering的出现次数,see this example作为提示的号码。

 int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 5 }; 

     var numberGroups = 
      from n in numbers 
      group n by 5 into g 
      select g; 

     g.Count(); // occurences 
+0

我很困惑,这段代码如何知道我们正在寻找哪个领域? – Hemant 2009-05-20 11:16:05

+0

它返回*唯一*行的列表,以便所有字段的组合不同。这转换为SELECT DISTINCT数据库机制。 – tylerl 2009-05-20 11:20:10

0

您可以使用.Distinct()运算符 - 它将对数据库执行SELECT DISTINCT,并提供您所要求的内容。

1

查询将在店内进行评估。

var windows = db.Tickets.Select(ticket => ticket.Window).Distinct(); 
3
var query2 = from ticket in db.tickets 

group window by ticket.Window into result 
select new 
{ 
    Name = result.Window, 
    Sum = result.Sum(i => i.Count) 
}; 
相关问题