如果相关实体使用LINQ具有值,则包括记录

时间:2014-04-03 11:11:50

标签: c# linq entity-framework

我只需要列出在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.

1 个答案:

答案 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")