我有一个“Tickets”表,其中有一些结构(删除了不必要的列)
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快速版。
编辑: 谢谢你的答案,它解决了上述问题。只是贪婪,但有没有办法也得到每个窗口的总计数。例如:
答案 0 :(得分: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 :(得分: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)
};
答案 2 :(得分:1)
Linq Samples Part 11应该会帮助你。只需在Linq结果上调用Distinct()
函数即可。就这么简单。
var tickets = (from t in db.Tickets
select t).Distinct();
<强> [编辑] 强>
将出现的数字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
答案 3 :(得分:1)
将在商店内评估查询。
var windows = db.Tickets.Select(ticket => ticket.Window).Distinct();
答案 4 :(得分:0)
您可以使用.Distinct()运算符 - 它将对数据库进行SELECT DISTINCT,准确提供您所要求的内容。