C#의 DataTables 및 열거 형 목록을 처음 사용합니다. 나는 많은 도움을 찾았지만이 문제는 어디서나 얻을 수없는 것 같습니다 .... 나는 간단한 테이블을 가지고 있습니다. 날짜, 코드, 가격은 시세 기호로 코드를 참조하십시오. 본질적으로이 날짜와 다음 날짜, 즉 특정 코드에 대한 날짜 t + 1/날짜 t 사이의 반품 또는 가격 변경을 계산하려고합니다. 그런 다음 테이블에 다시 추가하십시오. 다음Datatables/Enumerated Lists, C# 및 두 숫자의 차이 계산
private static DataTable GetData(dynamic Dataset)
{
DataTable tbl = new DataTable();
tbl.Columns.Add("EvalDate", typeof(DateTime));
tbl.Columns.Add("Code", typeof(string));
tbl.Columns.Add("Price", typeof(double));
tbl.Columns.Add("Return", typeof(double));
for (int irow=2;irow<Dataset.GetLength(0); irow++)
{
if (Dataset[irow,1] == null) { break; }
DateTime EvalDate = DateTime.FromOADate((double)(Dataset[irow, 1]));
string code = (string)(Dataset[irow, 2]);
double price = (double)Dataset[irow,3];
tbl.Rows.Add(EvalDate,code,price,null);
}
return tbl;
}
하지만 I : 나는 데이터 테이블 또는 열거 세트가 갈 수있는 방법입니다 있는지 확실하지 않습니다
은 아무도 덜 나는 DataTable을 처음으로 시도 설정은 아래 표를 작성하는 일을하지 문제를 해결하기 위해 목록을 사용하려 :
var Dataset = getRng("A1:E50000", "Data");
DataTable tbl = GetData(Dataset);
var uniquecodes = (from items in tbl.AsEnumerable()
select items["Code"]).Distinct().ToList();
List<object> Running = new List<Object>();
foreach (var code in uniquecodes)
{
var ts = (from items in tbl.AsEnumerable()
orderby items.Field<DateTime>("EvalDate")
where items.Field<string>("Code") == (string)code
select items);
ts.ElementAt(0).SetField<double>("PriceRet", 1);
for (int idx = 1; idx < ts.Count(); idx++)
{
double price0 = ts.ElementAt(idx - 1).Field<double>("Price");
double price1 = ts.ElementAt(idx).Field<double>("Pice");
double delta = price1/price0;
ts.ElementAt(idx).SetField<double>("PriceRet", delta);
}
Running.Add(ts);
이 충돌하지 않았다, 그러나 그것은 희망 느리고 비효율적이다.
내 SQL 지식이 좋은,하지만 위와 같이 실행 가능한 코드로 그것을 설정하는 고민. 어떤 도움이라도 대단히 감사하겠습니다.
그래서 내가 원하는 결과를 달성하지만, SQL을 통해 .... 나는 다음과 같은 성명/쿼리 사용 :select row_number() over (partition by[Code] order by [EvalDate]) [Id],
[Evaldate], [Code], [Price]
into #TEMP
from MyTable
where Code in ('AAA','BBB','CCC'); -- The list of codes to calc the return for ...
select T1.[EvalDate],T1.[Code],T1.[Price]/T.[Price] as [Delta]
from #TEMP T1
inner join #TEMP T
on T1.Id = T.Id +1
and T1.Code = T.Code
drop table #TEMP
이 다음 제대로 가격에서 적용 가능한 변화와 함께, 나에게 피봇 팅 목록을 제공을 각 날짜의 변경 사항.
DataTable이 SQL처럼 쉽고 빠를 것이라고 기대 했었습니까?
안녕하세요 Alistair - 링크 및 참조 주셔서 감사합니다 -이 '확실히'내 이해를 돕는. 하지만 동적 인 Dataset을 tbl로 변환 한 다음 본질적으로 열거 형 목록을 열거하면 문제가 발생합니다. 나는 열거 된 것에 대한 나의 부족함이 주요 원인을 열거하지만 그렇게 생각한다. 다시 한번 감사드립니다. – 765tgs