2014-10-01 108 views
1

這EF事情似乎並不是一件容易的路線,我作爲一個初學者:(我有以下SQL這給20個記錄:凡在實體框架沒有返回正確的結果第

SELECT 
    Suppliers.SupplierName, 
    srma.Id, 
    srma.CreatedOn, 
    srmaStatuses.StatusName, 
    srma.Status, 
    srma.PONumber, 
    srma.PONumber, 
    PurchaseOrders.PODate, 
    PurchaseOrders.suppliersOrderNumber 
FROM 
    SRMAs srma 
    join srmastatuses on srma.status = srmastatuses.id 
    JOIN PurchaseOrders on SRMA.PONumber = PurchaseOrders.PONumber 
    JOIN Suppliers on Suppliers.SupplierID = PurchaseOrders.SupplierID 
WHERE 
    srma.Status in (0,1) 
    AND(PurchaseOrders.suppliersOrderNumber LIKE '%2002%' OR srma.PONumber = '2002') 

我做了如下LINQ該版本不返回任何記錄:如果我還是刪除這部分

var searchQuery = collection["query"].Trim(); 

DBContext_Model db = new DBContext_Model(); 
int[] ids = new int[] { 0, 1 }; 
//LINQ way to JOIN tables 
var srmas = (
    from SRMAs in db.SRMAs 
    join SRMAStatus in db.SRMAStatus on SRMAs.Id equals SRMAStatus.Id 
    join PurchaseOrders in db.PurchaseOrders on SRMAs.PONumber equals PurchaseOrders.PONumber 
    join Suppliers in db.Suppliers on PurchaseOrders.SupplierID equals Suppliers.SupplierID 
    join SRMADetails in db.SRMADetails on SRMAs.Id equals SRMADetails.SRMAId 
    where 
    (
     ids.Contains(SRMAs.Status) 
     && 
      (
       searchQuery.Contains(PurchaseOrders.suppliersOrderNumber) 
       || 
       searchQuery.Contains(SqlFunctions.StringConvert((decimal)SRMAs.PONumber)) 
      ) 
    ) 
    select new 
    { 
     SRMAs.Status,SRMAs.Id, 
     SRMAs.PONumber, 
     SRMAs.CreatedOn, 
     Suppliers.SupplierName, 
     SRMAStatus.StatusName, 
     PurchaseOrders.PODate, 
     PurchaseOrders.suppliersOrderNumber 
    }).ToList(); 

它只返回4條記錄,雖然它應該做的20

&& 
(
    searchQuery.Contains(PurchaseOrders.suppliersOrderNumber) 
    || 
    searchQuery.Contains(SqlFunctions.StringConvert((decimal)SRMAs.PONumber)) 
) 

是否可以使用LINQ而不是搞亂我的生活?

+5

這部分'SRMAs.Id等於SRMAStatus.Id',不應該是'SRMAs .StatusId等於SRMAStatus.Id'? – 2014-10-01 18:17:24

+0

尷尬對我來說,是:( – Volatil3 2014-10-01 18:20:47

+0

@YuliamChandra即使這樣,後''&&沒有返回結果 – Volatil3 2014-10-01 18:24:31

回答

1

on條款應比較FK來PK,你比較PK與SRMAStatus加入SRMA時PK。將SRMAs.Id equals SRMAStatus.Id更改爲SRMAs.StatusId equals SRMAStatus.Id

2.刪除這部分join SRMADetails in db.SRMADetails on SRMAs.Id equals SRMADetails.SRMAId因爲sql查詢沒有連接子句到SRMADetails。

3.,你不得不在此刻搜索查詢會產生這樣的:

CAST(CHARINDEX(PurchaseOrders.suppliersOrderNumber, '2002') AS int) > 0 
or 
CAST(CHARINDEX(cast(SRMAs.PONumber as varchar(max)), '2002') AS int) > 0 

,它應該是:

PurchaseOrders.suppliersOrderNumber.Contains(searchQuery) 
|| 
SqlFunctions.StringConvert((decimal)SRMAs.PONumber).Contains(searchQuery) 

因此,它產生類似:

PurchaseOrders.suppliersOrderNumber LIKE '%2002%' 
|| 
srma.PONumber LIKE '%2002%'