簡體   English   中英

LINQ to SQL加入FirstOrDefault()的問題

[英]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)

將返回一個只有一個元素的延遲集合。

為什么不讓你的查詢更簡單!!

  1. 我強烈建議在查詢結束時使用FirstOrDefault() (查詢的最后一個方法)。
  2. 把你的條件放在Where更好而不是FirstOrDefault因為你要把它放在最后

我認為你的錯誤是FirstOrDefault with join ,當你使用join時你應該加入一個集合而不是單個項目(single是FirstOrDefault的結果)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM