MsSQL Expressデータベースにクエリを実行して、複数の日付が関連付けられているすべてのCompanyIDを見つけようとしています。複数の日付を言うときは、異なる日数である必要があることを指摘する必要があります。
例えば
ID UkDate CompanyId
1 01/01/2015 16
2 01/01/2015 16
3 03/01/2015 18
4 05/01/2015 19
5 06/01/2015 20
6 08/01/2015 20
上記の例では、ComapnyID 20の行のみが返されます。これは、複数回発生し、それらの時間が日付を超えているためです(companyId 16には複数のエントリがありますが、両方のエントリが同じ日付であることに注意してください)。
Linqを使用してこのクエリを作成する方法がわかりません。私のオブジェクトはすでにありますがIQueryable<T>
、コードを実行せずにクエリを実行し、クエリを「終了」する方法がわかりません。
私はVisualStudioの近くにいませんが、コードは次のようになります(入力エラーはご容赦ください、これはメモリからのものです)
//First, grab unique CompanyIds as this removes those who didn't visit multiple times
var uniqueIds = (from d in this._database.MyTable
select companyId).Distinct();
//This is the problem because on each iteration I'm re-querying the database!
foreach(var id in uniqueIds)
{
var result = (from d in this._database.MyTable.OrderBy(a=>a.UkDate)
where d.CompanyId==id
select d);
//check for nulls
if (result.First(a=>a.UkDate.Day) != result.Last(a => a.UkDate.Day)
{
this.AllResultsList.AddRange(results);
}
}
エラーなしで動作しますが、コードが正しいとは感じません。ハックのように感じられ、非効率的ですが、これが私の最善の努力でした。データベース要求の数を減らして同じ結果を達成する方法はありますか?
var results = (from o in this._database.MyTable
group o by o.CompanyId into grouped
where (grouped.Max(s => s.UKDate) - grouped.Min(s => s.UKDate)).TotalDays > 0
select grouped.Key);
編集(OPによる)
最終結果:
var results = (from o in this._database.MyTable
group o by o.CompanyId into grouped
where (Convert.ToDateTime(grouped.Max(s => s.UKDate)) - Convert.ToDateTime(grouped.Min(s => s.UKDate))).TotalDays > 0
from l in myTable
where l.CompanyID == grouped.Key
select l).ToList();
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加