【发布时间】:2014-09-05 21:44:25
【问题描述】:
我在数据库中有两个表。票和票号。我想编写 Linq 来计算与传递给此函数的数字相匹配的票的数量。由于我们不知道必须匹配多少个数字,因此 Linq 必须是动态的……据我所知。
public int CountPartialMatchingTicket(IList<int> numbers)
{
// where's the code? =_=;
}
假设现在数据库中有 3 张门票,我想计算所有编号为 3 和 4 的门票。
(1) 1 2 3 4
(2) 1 3 4 6 7
(3) 1 2 3
在这种情况下,函数应该返回 2,因为票 (1) 和 (2) 具有匹配的数字。 在另一种情况下,如果要求匹配 1、2、3,那么我们应该再次返回 2。
这是数据库中这两个表的样子:
Ticket:
TicketId, Name, AddDateTime
TicketNumbers:
Id, TicketId, Number
我以前从未使用过 Dynamic Linq,所以以防万一这是我的 cs 文件顶部的内容。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using LottoGen.Models;
using System.Linq.Dynamic;
首先,我什至不知道如何为固定数量的数字编写 Linq 行。我想 SQL 应该是这样的:
SELECT TicketId, COUNT(0) AS Expr1
FROM TicketNumber
WHERE (Number = 3) OR (Number = 4)
GROUP BY TicketId
但这也不是我想要的。上面的查询会得到有 3 或 4 的门票 - 但我只想要有两个号码的门票。而且我想它必须以某种方式嵌套才能返回单个计数。如果我必须用我的想象力来完成这个功能,那将是这样的:
public int CountPartialMatchingTicket(IList<int> numbers)
{
string query = "";
foreach(int number in numbers) {
query += "Number = " + number.ToString() + " AND ";
}
// I know.. there is a trailing AND.. lazy
int count = DbContext.TicketNumbers.Where(query).Count();
return count;
}
哦,等一下。那里没有动态Linq...上面看起来像我会在PHP中做的事情,而那个查询语句显然没有做任何有用的事情。我在做什么? :(
最后,我想向网页输出一个小表格,如下所示。
Ticket Matching Tickets
-----------------------------------
3 4 2
三位一体,救命!
【问题讨论】:
标签: c# linq entity-framework asp.net-mvc-4 dynamic-linq