我只需要列出在Carga的相关实体中具有价值的DME:
主要实体:
public partial class DME
{
public int Id { get; set; }
public virtual IList<Carga> Cargas { get; set; }
}
相关实体Carga:
public class Carga
{
public int Id { get; set; }
public string PesoLiquido { get; set; }
public string PesoBruto { get; set; }
public string Volume { get; set; }
}
PesoLiquido和PesoBruto可以是NULL或&#34; 0&#34;或&#34; 10.200&#34; Valor可以是NULL或&#34; 0&#34;或&#34; 10.20&#34;
到目前为止,我能够得到这个,但有错误:
IList<DME> DMEs = db.DMEs
.Where(d => d.Cargas.Select(c => c.PesoLiquido) != null && d.Cargas.Sum(c => c.PesoLiquido) > 0)
.Where(d => d.Cargas.Select(c => c.PesoBruto) != null && d.Cargas.Sum(c => c.PesoBruto) > 0)
.Where(d => d.Cargas.Select(c => c.Valor) != null && d.Cargas.Sum(c => c.Valor) > 0))
错误:
Cannot compare elements of type 'System.Collections.Generic.IEnumerable`1'. Only primitive types, enumeration types and entity types are supported.
答案 0 :(得分:3)
问题在于每个地方的这一部分:
d.Cargas.Select(c => c.PesoLiquido) != null
您正在尝试将集合与null进行比较,而该集合无法转换为SQL。
相反,做
d.Cargas.Any(c => c.PesoLiquido != null)
此外,根据您发布的代码,这些属性中的每一个都是一个字符串,但您正在做一笔可能无法翻译的总和。这些列实际上是数据库中的字符串还是数字?
如果它们是数据库中的数字,请将每个属性的类型更改为double?
并执行:
.Where(d => d.Cargas.Any(c => c.PesoLiquido > 0))
如果出于某种原因它们是字符串,那么请执行:
.Where(d => d.Cargas.Any(c => c.PesoLiquido != null && c.PesoLiquido != "0.00")