2016-03-15 289 views
2

我有,當我把一切都在一個聲明中完美的作品查詢:不能隱式轉換類型System.Linq.IQueryable <AnonymousType#1> System.Linq.IQueryable <AnonymousType#2>

var rs = db.SerialNumbers 
    .Join(db.ProductLines, sn => sn.ProductLineId, pl => pl.Id, (sn, pl) => new { pl.Id, pl.Category, sn.UserId }) 
    .Where(sn => sn.UserId == userId) 
    .Select(sn => new { sn.Id, sn.Category }) 
    .Distinct(); 

但是我需要爲UserId添加條件。我只想過濾,如果有一個在用戶id的條目,即用戶ID> 0,所以我改變查詢到:

var rs = db.SerialNumbers 
    .Join(db.ProductLines, sn => sn.ProductLineId, pl => pl.Id, (sn, pl) => new { pl.Id, pl.Category, sn.UserId }); 

    if(userId > 0) 
    { 
    rs = rs.Where(sn => sn.UserId == userId); 
    } 

    rs = rs.Select(sn => new { sn.Id, sn.Category }); 

我得到的編譯此錯誤:

不能隱式轉換類型System.Linq.IQueryable<AnonymousType#1>System.Linq.IQueryable<AnonymousType#2>

我該怎麼辦?

回答

5

你加入項目,這一點:

(sn, pl) => new { pl.Id, pl.Category, sn.UserId } 

但最終分配是這樣的:

sn => new { sn.Id, sn.Category } 

他們是不是同一類型,因此這個問題。

如果查詢實際上已經是在你想要的形狀,最簡單的解決方法是隻使用兩個不同的變量:

var query = db.SerialNumbers 
       .Join(db.ProductLines, 
        sn => sn.ProductLineId, 
        pl => pl.Id, 
        (sn, pl) => new { pl.Id, pl.Category, sn.UserId }); 
if (userId > 0) 
{ 
     query = query.Where(sn => sn.UserId == userId); 
} 
var results = query.Select(sn => new { sn.Id, sn.Category }); 
相關問題