使用Linq的数据库表中的唯一字符串列表?

Hem*_*ant 3 c# linq sql-server

我有一个"门票"表,有一些跟随结构(删除不必要的列)

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

我已将此表映射到"Ticket"类.所以我可以得到这样的所有记录:

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

现在我需要获取表中唯一窗口名称的列表.对于上表,列表看起来像:

  • 互联网
  • 电话
  • 传真

无论如何创建这个列表而不获取所有记录并迭代它们?

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

编辑:谢谢你的答案,它解决了上述问题.只要被贪婪,但有什么办法得到了总数的每个窗口.例如:

  • 互联网= 15
  • 电话= 25
  • 传真= 20

Jon*_*eet 10

怎么样:

var tickets = db.Tickets.Select(t => t.Window).Distinct();
Run Code Online (Sandbox Code Playgroud)

我喜欢在我做多个操作时只使用查询表达式,但是如果你喜欢它们,则等效的是:

var tickets = (from t in db.Tickets
               select t.Window).Distinct(); 
Run Code Online (Sandbox Code Playgroud)

要获得计数,您需要分组:

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);
}
Run Code Online (Sandbox Code Playgroud)

请注意,这应该最终都在数据库端执行 - 检查SQL查询以检查这一点.