با سلام و خسته نباشید
من دو تا جدول دارم یکی اطلاعات پرسنل و دومی اطلاعات ورود و خروج پرسنل
می خواهم گزارشی داشته باشم که لیست پرسنل رو در هر روز نمایش داده و ریز تردد هر شخص رو در یک ردیف نمایش دهد
این کار رو با استفاده از linq انجام دادم اما سرعت گزارش پایین هست
من کوئری SQL رو می خوام
این هم نمونه کد خودم
using (var db = new DB_ClockMHDataContext(MH_Static.Constr))
{
mS_GridX1.DataSource = (from i in db.Tbl_Personels
let txt = string.Join(" , ", i.Tbl_All_Vorudis
.Where(x => x.Date == ms_TarixAz.MS_Tarikh.Value.ToDatetime())
.OrderBy(x => x.TimeReport)
.Select(x => "[" + MH_Static.GetType(x.Kind) + "-»" + x.TimeReport + "] ").Distinct())
select new
{
i.FullName,
txt,
}).ToList();
}
فکر میکنم این کارتون رو راه بندازه احتمالا:
SELECT employe.Name,entrance.Time
FROM employe,entrance
WHERE employe.Id=entrance.EmployeId
ممنون دوست عزیز اما این کوئری که شما گفتین خیلی سادست من منظورم اینجوریست
| نام و نام خانوادگی | شزح تردد |
|---|---|
| محسن هرمزی | [ورود »07:30] ، [خروج »17:03] |
| علی محمدی | [ورود »07:31] ، [شروع ماموریت »09:45] ، [ورود ماموریت »12:55] ، [خروج » 17:00] |

ممنون اما خودم یک راهی پیدا کردم و جواب داد و سرعت تهیه گزارشم از 15 الی 20 ثانیه به 1 الی 2 ثانیه تغییر کرد
1 - اول اومدم یک View ساختم
SELECT TAV.FK_Devic,
TP.FK_Shift,
TP.Code,
RTRIM(LTRIM(TP.FullName)) AS FullName,
TAV.Date,
TD.FADate,
TD.FADayOfWike,
TAV.Time,
RTRIM(LTRIM(TAV.TimeReport)) AS TimeReport,
RTRIM(LTRIM(TKIO.Title)) AS Kind,
TAV.IsEdit,
TAV.IsAdd,
TAV.IsDelete,
TAV.ID
FROM dbo.Tbl_All_Vorudi AS TAV
INNER JOIN dbo.Tbl_Personel AS TP
ON TP.Code = TAV.PersonelCode
INNER JOIN dbo.Tbl_Date AS TD
ON TD.ENDate = TAV.Date
INNER JOIN dbo.Tbl_Kind_In_Ot AS TKIO
ON TKIO.ID = TAV.Kind;2 - بعد یک sp ساختم که از روی view دیتا هارو مرتب می کند
CREATE FUNCTION [dbo].[MS_Get_In_Ot]
(
@Code INT,
@DateAz DATE,
@DateTa DATE
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @TitleType NVARCHAR(MAX);
SELECT @TitleType = COALESCE(@TitleType + ' , ', ' ') + '[' + TAV.TimeReport + '» ' + TAV.TitleKind + ']'
FROM dbo.View_In_Ot_Kind AS TAV
WHERE TAV.PersonelCode = @Code
AND TAV.Date >= @DateAz
AND TAV.Date <= @DateTa
AND TAV.IsDelete = 0
ORDER BY TAV.TimeReport
RETURN (@TitleType);
END;3 - در نهایت در سی شارپ کدم رو به این شیوه نوشتم
using (var db = new DB_ClockMHDataContext(MH_Static.Constr))
{
var list = db.Tbl_Personels.Where(x => x.isActive);
if (fkShift > 0)
list = list.Where(x => x.FK_Shift == fkShift);
mS_GridX1.DataSource = (from i in list
let txt = db.MS_Get_In_Ot(i.Code, DateAz, DateTa)
select new
{
i.FullName,
txt,
}).ToList();
}