C# SQL组合
我有一个表,该表具有相同Id的多个数据。我需要对这些数据进行组合 例如,该表包含C# SQL组合,c#,sql,C#,Sql,我有一个表,该表具有相同Id的多个数据。我需要对这些数据进行组合 例如,该表包含 ID Visit DAte Visit number Rational ----------------------------------------------- 1 14/05/2011 1 new 1 15/06/2012 2 Emergency 1 17/07/2012
ID Visit DAte Visit number Rational
-----------------------------------------------
1 14/05/2011 1 new
1 15/06/2012 2 Emergency
1 17/07/2012 3 Check-Up
最多20次访问
我想要的结果是这样的
ID Visit DAte Visit number Rational
-------------------------------------------------
1 14/05/2011 1 new
1 15/06/2012 2 Emergency
1 17/07/2012 3 Check-Up
1 14/05/2011 1 new
1 15/06/2012 2 Emergency
1 19/07/2012 4 follwo-up
1 14/05/2011 1 new
1 15/06/2012 2 Emergency
1 18/12/2012 5 Check-Up
etc....
最后一个是
1 14/01/2011 18 Referral
1 15/02/2012 19 Check-up
1 18/10/2012 20 Emergency
我可以通过查询来完成吗
//-我定义了一个类,并从该类中定义了一个列表
public struct ACVsize5
{
public int ID;
public DateTime date;
public int RaId;
public int HpId;
public int DgId;
public int VisitNum;
}
List<ACVsize5> patient = new List<ACVsize5>();
//-编辑
我必须检查一名患者的组合,以便与其他4名患者匹配
我提出了生成第一个组合,如果它是匹配的,我将继续生成其余的,但是这个操作花费了很长时间,我如何提高下面代码的性能
for (int j = 0; j < 10000; j++)
{
int id1 = getid(names[j].ToString(), 10000);
for (int t = 0; t < 10000; t++)
{
generate_firstACV5A(id1, nvisit(id1), names[j].ToString());
int id2 = getid(names[t].ToString(), 10000);
if (id1 == id2) { }
else
{
generate_firstACV5B(id2, nvisit(id2), names[t].ToString());
if (comparefirst()==true)
{
if (count == 0)
{
safecount++;
if (safecount == 4) break;
}
下面是一些将生成3个集合的示例代码。我不知道如果你让ORM处理查询,但如果你把它作为对象放在本地,它将如何处理这个问题
var queried = ... // example: Enumerable.Range(1, 20).Select(n => new { FK = n });
var sets =
from a in queried
from b in queried
from c in queried
where a.FK < b.FK && b.FK < c.FK
select new { a, b, c };
使用您的代码:
List<ACVsize5> patient = ... // filled by you but I assume a single unique ID
var sets =
from a in patient
from b in patient
from c in patient
where a.VisitNum < b.VisitNum && b.VisitNum < c.VisitNum
select new {a, b, c}
我不知道你在这里想做什么-结果集与原始数据的关系如何?我在这里推断的模式是行选择3,因此对于你的示例,你将有1140个集。这是正确的吗?你说的理性是指理性吗。。。feaver是指发烧吗?是的,正确总数是1140这是我对rational部分的错误我在我的问题上纠正了它谢谢你的帮助,我可以将表名放在这个查询中?@user1832754:你可以将数据查询到本地数据集列表、数组,任何IEnumerable,然后编辑LINQ语句中的值以获得所需的输出。您的意思是我将数据加载到Arraylist或list,然后在C上使用给定的查询,这样我就得到了正确的结果吗?@user1832754:是的。除了ArrayList之外,没有什么理由在.Net 1.1之后使用它们。我已经为我的表创建了一个类,并从这个类中加载数组上的数据。我如何在数组上使用上面的查询?
List<ACVsize5> patient = ... // filled by you but I assume a single unique ID
var sets =
from a in patient
from b in patient
from c in patient
where a.VisitNum < b.VisitNum && b.VisitNum < c.VisitNum
select new {a, b, c}