我试图转换一个LINQ查询,将两个表连接到实体框架中的 IQueryable
类型,这样我就可以在其上进一步应用过滤器表达式 .
这是代码:
IQueryable<Bill_Joined_V1> bills =
(from primary in _billEntity.BillTable
join secondary in _billEntity.BillInfoTable on primary.BillID equals secondary.BillID
orderby primary.BillID
select new
{
primary.BillID,
primary.CustomerID,
secondary.Name,
secondary.Value
}).AsQueryable<Bill_Joined_V1>().Where(FilterExp);
实体类如下:
public class Bill_V1
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid BillID { get; set; }
public string BillTypeID { get; set; }
public Guid CustomerID { get; set; }
public Guid UserID { get; set; }
[ForeignKey("UserID")]
public virtual User_V1 UserTable { get; set; }
public double AmountDue { get; set; }
}
public class BillInfo_V1
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long BillInfoID { get; set; }
public Guid BillID { get; set; }
[ForeignKey("BillID")]
public virtual Bill_V1 BillTable { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}
// Dummy bill record for query purpose
public class Bill_Joined_V1
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long BillRecID { get; set; }
public Guid BillID { get; set; }
[ForeignKey("BillID")]
public virtual Bill_V1 BillTable { get; set; }
public Guid CustomerID { get; set; }
[ForeignKey("CustomerID")]
public virtual Customer_V1 CustomerTable { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}
代码无法编译 . 它产生错误信息说
'System.Linq.IQueryable'不包含'AsQueryable'的定义,并且最好的扩展方法重载'System.Linq.Queryable.AsQueryable(System.Collections.Generic.IEnumerable)'有一些无效的参数
有没有办法将LINQ查询转换为 IQueryable
类型而不将查询结果放到物理表?我该如何解决这个问题?谢谢 .
1 回答
你不应该打电话给
.AsQueryable()
..Where()
旨在返回适当类型的IQueryable . 但是代码中IQueryable的确切类型不会是IQueryable<Bill_Joined_V1>
,因为您使用的是匿名类型 . 你真正需要做的是在这里不使用匿名类型:相反,做