我正在嘗試從 2 個不同的表中確定特定時間使用的指定車輛的數量。表 postThr 包含時間范圍,表 postFiv 包含各種資訊,包括指示列“v”時的車輛型別。
所有表共享一個“FK”列。
我們將獲得日期、開始時間、結束時間和車輛型別。
我很確定我得到了正確的選擇陳述句,如下所示。現在我必須為車輛加入 postFiv。
DateTime givenDate = DateTime.Parse("11/15/22");
TimeSpan givenTime = TimeSpan.Parse("9:00");
TimeSpan givenEndT = TimeSpan.Parse("13:00");
string vehicleType = "VAN";
var qry = from x in _context.PostThrs
where
x.ThrDate == givenDate &&
x.ThrText == "SERVICE-" &&
((
x.ThrTime < givenTime &&
x.ThrEndT > givenTime
) || (
x.ThrTime < givenEndT &&
x.ThrEndT > givenEndT
))
select x
;
我的直覺是繼續做類似的事情:
select x new {
join ex in _context.PostFivs
on ex.FK equals x.FK
where ex.Code == "V" && ex.Text == "VAN"
}.Count()
但我知道這是不對的。我真的在為復雜的 LINQ 陳述句而苦苦掙扎;讓我想回到SQL學習。
編輯
請求了模型類。
PostThr
-ThrID - int
-ThrFK - string
-ThrDate - datetime
-ThrTime - timespan
-ThrEndT - timespan
-ThrText - string
PostFiv
-FivID - int
-FivFK - string
-FivCode - string[1 char]
-FivText - string
編輯我不確定您到底在尋找什么,但這些是完整的模型。按照要求。沒有導航屬性。
這是postThr
public class PostThr
{
//would be nice if we could require at least 1 record for each Zero record
[Key]
public int ThrId { get; set; }
[ForeignKey("PostZero")]
[Display(Name = "0/")]
public string ThrZero { get; set; }
[Display(Name = "Date*")]
[DataType(DataType.Date)]
//[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime ThrDate { get; set; }
[Display(Name = "Time")]
//[RegularExpression(@"^\d \.\d{0,2}$", ErrorMessage = "Must be between 0.00 and 23.99")]
//[Range(0, 23, ErrorMessage = "Must be between 0.00 and 23.99")]
public TimeSpan ThrTime { get; set; }
[Display(Name = "End Time")]
public TimeSpan ThrEndT { get; set; }
[Required]
[RegularExpression(@"[a-zA-Z0-9""'\s-|\.\=\ \*\/\\]*$")]
[Display(Name = "Text")]
[StringLength(160, MinimumLength = 2)]
public string ThrText { get; set; }
public string ThrTrackUser { get; set; }
public string ThrTrackTime { get; set; }
}
和 postFiv
public class PostFiv
{
[Key]
public int FivId { get; set; }
[ForeignKey("PostZero")]
[Display(Name = "0/")]
public string FivZero { get; set; }
[Required]
[Display(Name = "Priority Number")]
[StringLength(1, MinimumLength = 1)]
//[RegularExpression(?)] need to have only numbers 1-9
public string FivPrio { get; set; }
[Required]
[Display(Name = "Code Letter")]
[StringLength(1, MinimumLength = 1)]
//[RegularExpression(?)] need to have only letters a-z any case
public string FivCode { get; set; }
[Required]
[RegularExpression(@"[a-zA-Z0-9""'\s-|\.\=\ \*\/\\/¥():]*$")]
[Display(Name = "Remark Text")]
[StringLength(2000, MinimumLength = 1)]
public string FivText { get; set; }
public string FivTrackUser { get; set; }
public string FivTrackTime { get; set; }
}
編輯蘋果的另一口...... 11 月 14 日有 2 個作業,有一輛面包車,并且總體上符合標準。所以答案必須是'2',但我得到了零,所以,不,這到目前為止還行不通。
DateTime givenDate = DateTime.Parse("11/14/22");
TimeSpan givenTime = TimeSpan.Parse("9:00");
TimeSpan givenEndT = TimeSpan.Parse("18:00");
var qry = from x in _context.PostThrs
where
x.ThrDate == givenDate &&
x.ThrText == "SERVICE-" &&
((
x.ThrTime < givenTime &&
x.ThrEndT > givenTime
) || (
x.ThrTime < givenEndT &&
x.ThrEndT > givenEndT
)) select new { zero = x.ThrZero };
var ans = from y in qry join ex in _context.PostFivs on y.zero equals ex.FivZero select ex;
var oth = (from z in ans where z.FivCode == "V" && z.FivText == "VAN-" select z).Count();
var xyz = oth;
uj5u.com熱心網友回復:
您可以在單個查詢中使用直接連接,如下所示:
DateTime givenDate = DateTime.Parse("11/14/22");
TimeSpan givenTime = TimeSpan.Parse("9:00");
TimeSpan givenEndT = TimeSpan.Parse("18:00");
var qry = from x in _context.PostThrs
join y in _context.PostFivs on x.ThrZero equals y.zero
where
x.ThrDate == givenDate &&
x.ThrText == "SERVICE-" &&
((
x.ThrTime < givenTime &&
x.ThrEndT > givenTime
) || (
x.ThrTime < givenEndT &&
x.ThrEndT > givenEndT
) && y.FivCode == "V" && y.FivText == "VAN-" ) select y.Count();
此查詢將回傳您的全部PostFivs資料。你可以從y.Count()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/515615.html
標籤:C#林克asp.net 核心
