当我将所有内容都放在一个语句中时,我的查询非常有效:
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添加条件。我只想过滤userId中的条目,即userId>所以我改为查询:
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>
我该怎么办?
答案 0 :(得分: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 });