私はLinqが初めてで、これについて複雑な方法で行ったと確信しています。Linqで次のSQLのようなことをしようとしています:
SELECT DISTINCT
count(vendor) as vendorCount,
reqDate,
status,
openDate,
item,
poDate,
count(responseDate) as responseCount
FROM
myTable
GROUP BY
reqDate, status, openDate, item, poDate
HAVING
reqDate > openDate
これが私がこれまでに持っているものです。
var groupQuery = (from table in dt.AsEnumerable()
group table by new
{
vendor = table["vendor"], reqdate = table.Field<DateTime>("ReqDate"), status = table["status"],
open = table["openDate"],
item = table["item"),
podate = table.Field<DateTime>("PODate"), responsedate = table.Field<DateTime>("responseDate"),
}
into groupedTable
where Having(groupedTable.Key.reqdate, groupedTable.Key.openDate) == 1
select new
{
x = groupedTable.Key,
y = groupedTable.Count()
}).Distinct();
foreach (var req in groupQuery)
{
Console.WriteLine("cols: {0} count: {1} ",
req.x, req.y);
}
having() は、2 つの datetime パラメーターを取り、reqDate が openDate より大きい場合に 1 を返す関数です。コンパイルして実行しますが、明らかに望んでいた結果が得られません。これはLinqを使用して可能ですか? このデータを Excel スプレッドシートにプッシュしたいので、この linq クエリからデータテーブルを作成したいと考えています。データテーブルからデータビューを作成するだけで、Linq をいじらないほうがよいでしょうか?