Linq to Entities中的Union错误

时间:2014-03-06 17:31:56

标签: c# linq entity-framework

我在查询中遇到问题,我想要合并2个列表。

我想将表格地方地理位置中的记录合并到视图模型属性地方

Fruits = (from e in db.Fruits
           where !e.Excluded
           select new FruitViewModel()
           {
               CodFood = e.CodFood,
               Name = e.Name,
               Color = e.Color,
               Places = (from p in e.Places
                          where !p.Excluded
                          select new FruitViewModel()
                          {
                              CodPlace = p.CodPlace,
                              Name = p.Name
                          }).Union(
                          from r in e.Locations
                          where !r.Excluido
                          select new FruitViewModel()
                          {
                              CodLocation = r.CodLocation,
                              Name = p.Name
                          })
           }),

但它给了我:

  

System.NotSupportedException:类型“Project.ViewModel.Fruits.FruitsViewModel”出现在单个LINQ to Entities查询中的两个结构不兼容的初始化中。可以在同一查询中的两个位置初始化类型,但前提是在两个位置都设置了相同的属性,并且这些属性的设置顺序相同。

我可以在Linq执行this answer之后合并,但是我想保持简单,不要过多改变这段代码,如果可能的话 - 在延迟执行之前进行查询。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:14)

根据错误消息,您的FruitViewModel初始化似乎存在问题。试试这个:

           Places = (from p in e.Places
                      where !p.Excluded
                      select new FruitViewModel()
                      {
                          CodLocation = "",
                          CodPlace = p.CodPlace,
                          Name = p.Name
                      }).Union(
                      from r in e.Locations
                      where !r.Excluido
                      select new FruitViewModel()
                      {
                          CodLocation = r.CodLocation,
                          CodPlace = "",
                          Name = p.Name
                      })