[英]LINQ to SQL Join issues with FirstOrDefault()
我之前發過一個問題,但我現在已經把問題縮小了,這是一個非常不同的問題。 基本上,我有一個相當長的查詢,旨在從數據庫中選擇值到一個自定義結構(我將在下面顯示),但我遇到加入問題 - paiculary試圖只選擇一個連接的第一行。 這是我的查詢:
IENumerable<VehicleDetails> list = (
from s in dc.Vehicles
join veh in dc.VehicleTypes
on s.VehicleType equals veh.ID into vg
from v in vg.DefaultIfEmpty()
join consignments in dc.Consignments
.FirstOrDefault(x => x.TripDate > dateFrom &&
x.TripDate < dateTo &&
x.DeliveryDepot == depot.Letter &&
(x.DeliveryStatus == 2 || x.DeliveryStatus == 3))
on new
{
Reg = s.VehicleReg,
Depot = s.VehicleDepot
} equals new
{
Reg = consignments.VehicleReg,
Depot = consignments.DeliveryDepot
} into con
from c in con.DefaultIfEmpty()
select new
{
VehicleType = (
s.VehicleType == null ? "?":
v.VehicleType1.ToString()),
TotalRate = c.Rate + c.AddCharges,
VehicleReg = (string.IsNullOrEmpty(c.VehicleReg) ?
c.Subcontractor: c.VehicleReg),
VehicleTypeName = (v.VehicleTypeDescription == null ?
"SubContractor": v.VehicleTypeDescription)
});
我的結構:
public struct VehicleDetails
{
internal string VehicleType;
internal decimal TotalRate;
internal string VehicleReg;
internal string VehicleTypeName;
}
使用第二個連接中的FirstOrDefault()
,我得到:
join子句中某個表達式的類型不正確。 在對組加入的調用中類型推斷失敗。
沒有它(並用Where替換FirstOrDefault
),我得到一個關於將匿名類型轉換為'vehdetials'類型的錯誤。 這兩個錯誤都發生from c in con.DefaultIfEmpty()
調用中的from c in con.DefaultIfEmpty()
。
任何想法都會非常受歡迎
FirstOrDefault()會急切地返回一個元素,但你需要的是一個元素集合(IQueryable)。
所以
dc.Consignments
.Where(x => x.TripDate > dateFrom &&
x.TripDate < dateTo &&
x.DeliveryDepot == depot.Letter &&
(x.DeliveryStatus == 2 || x.DeliveryStatus == 3))
.Take(1)
將返回一個只有一個元素的延遲集合。
為什么不讓你的查詢更簡單!!
FirstOrDefault()
(查詢的最后一個方法)。 Where
更好而不是FirstOrDefault
因為你要把它放在最后 我認為你的錯誤是FirstOrDefault
with join
,當你使用join時你應該加入一個集合而不是單個項目(single是FirstOrDefault的結果)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.