1

我已经导入了一个数据库,该数据库具有与 Subdata 一对多关系的集合 MainData,生成的代码看起来像这样;

 public DbSet<MainData> MainDatas{ get; set; }


 public partial class MainData
    {            
        public string NameOfMainData{ get; set; }           
        public virtual ICollection<SubData> SubDataSet{ get; set; }
    }

SubData 只是有一些不复杂的数据类型,如字符串和整数。

我可以将数据导入视图,因此我知道该部分有效。我想将它合并到一个模型中,以便我在同一模型中拥有“NameOfMainData”和 SubData 的集合,以便在视图中轻松访问,但我没有让它工作,这是我的尝试;

模型;

public class DataIWantInAList
{
    public IList<DataIWant> DataList { get; set; }

}
public class DataIWant
{
    public string NameOfMainData{ get; set; }
    public IEnumerable<SubData> SubDataSet{ get; set; }
}

在控制器中,我认为我可以在 DataList 中添加项目,但我没有设法在互联网上找到任何东西或为我自己解决......

var DataToView= from p in db.MainData
                        select new DataIWant()
                        {
                            NameOfMainData= p.NameOfMainData,
                            SubDataSet= p.SubDataSet
                        };


return View(DataToView);

不要按预期工作。我在 LINQ 方面不太好,但感觉这很容易,当我不让它工作时,这让我很沮丧。

任何输入都适用。

4

3 回答 3

1

免责声明
- 数据获取是在您使用 EntityFramework 的假设下进行的,因为我不是 LINQ 中最适合的 :( 请随时调整它
- 这只是众多方法之一。当您将模型提供给视图
- 参数应该是“过滤器”的基本占位符
- 您可以以任何您喜欢的方式扩展映射,只需确保在视图中正确引用,否则您将遇到运行时错误

在模型中,您可以执行类似的操作(即使我会将实体获取移至私有函数。在您的类 DataIWant 中,您只需指定所需的数据。如果您想专门映射,那么在启动您的DataIWantInAList

public class DataIWantInAList
{
    public IList<DataIWant> data;

    //Instanciation & Initialization
    public DataIWantInAList(params customparam)
    {
        using(EntitySet ent = new EntitySet())
        {
        //fetch data from DB
        this.data = (from x in ent.DataTableIWant where param == customparam select x).ToList();
        }
   }
}

在你的控制器中你可能想去:

public ActionResult fooBar()
{ 
  DataIWantInAList model = new DataIWantInAList(params);
  return View(model);
}

虽然您可以通过以下方式获取视图中的数据:

var List = model.data;
于 2013-04-17T12:53:57.757 回答
0

假设我理解您的问题,您可以使用 .Include(...) 来获取您想要的数据。

var DataToView = from p in db.MainData
                        select new DataIWant()
                        {
                            NameOfMainData= p.NameOfMainData.Include(p => p.SubDataSet)
                        }
于 2013-04-17T12:52:53.423 回答
0

您可以使用Include加载相关实体,然后将它们映射到您的模型类型:

var DataToView= from p in db.MainData
                            .Include("ItemTypeReference")
                        select new DataIWant()
                        {
                            NameOfMainData= p.NameOfMainData,
                            SubDataSet= p.SubDataSet
                                         .Select(s => new SubData {
                                                      // map SubData fields here
                                                      })
                                         .ToList()
                        };
于 2013-04-17T12:54:52.653 回答