vb.net - 如何将 linq 查询的结果转换为 List(Of T)

标签 vb.net linq entity-framework list knockout.js

我在 VB MV4 项目中使用 EntityFrameWork 5。

我有一个从 EntityFramework 图构建的数据库(模型优先而不是代码优先)

我有一个 ViewModel X,其中包含一个 List(ofT) T,它是我的实体中的一个

当我打开我的 Web 应用程序(在浏览器上)时,我要求 Controller 将 ViewModel X 作为 Json 对象提供给我,我用它来使用 Knockout JS 映射插件填充 MVVC( knockout 模型)。

当我要求模型时,我使用类似于下面显示的代码填充它

Public Class DataServiceController
    Inherits System.Web.Mvc.Controller

    <Authorize()> _
    Public Function RetrieveData() As JsonResult

        Dim model As ViewModelX
        model = New ViewModelX

    '=====================================
    ' Resources and Tools
    '=====================================
    Dim fetchedResourceAndToolsQuery = From a In db.ResourceAndTools
                       Where a.ProfileId = profile.ProfileId Select a

    For Each eachRes In fetchedResourceAndToolsQuery
        Dim res As ResourceAndTools = New ResourceAndTools
        res.Name = Trim(eachRes.Name)
        res.URL = Trim(eachRes.URL)
        res.Target = eachRes.Target
        res.ResourceId = eachRes.ResourceId
        model.ResourceAndTools.Add(res)
    Next

    Return Json(model, JsonRequestBehavior.AllowGet)

一切都很好!除了......这是问题

如上所述,ViewModelX 包含一个 List(of T) T 是 ResourceAndTools

是否有必要将 fetchedResourceAndToolsQuery(Linq 查询的结果)的内容复制(克隆、加载、不确定术语)到 model.ResourceAndTools(List(of T)),而无需实例化新对象并复制像我这样的属性正在做。

我搜索过(克隆、深复制、浅复制等)我最接近的解决方案是对如何深复制对象的一些解释,但它依赖于序列化,它不起作用,因为并非实体的所有属性框架对象是可序列化的。

任何帮助表示赞赏
谢谢

最佳答案

像这样?

model.ResourceAndTools = (
    From a In db.ResourceAndTools
    Where a.ProfileId = profile.ProfileId
    Select New ResourceAndTools() With { _
        .Name = Trim(a.Name), _
        .URL = Trim(a.URL), _
        .Target = a.Target, _
        .ResourceId = a.ResourceId}).ToList()

根据您的评论,也许您可​​以这样做,
Dim dataList = (
    From a In db.ResourceAndTools
    Where a.ProfileId = profile.ProfileId
    Select New With
    {
        .Name = Trim(a.Name),
        .URL = Trim(a.URL),
        .Target = a.Target,
        .ResourceId = a.ResourceId
    }).ToList()

model.ResourceAndTools = dataList.ConvertAll(Function(data)
        Return New ResourceAndTools() With
        {
            .Name = data.Name,
            .Url = data.Url,
            .Target = data.Target,
            .ResourceId = data.ResourceId
        }
    End Function)

关于vb.net - 如何将 linq 查询的结果转换为 List(Of T),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18855184/

相关文章:

c# - 按不同的对象排序并转换不同的对象

c# - 如何 : SQLite with EntityFramework and Code-First

vb.net - 正确地将对象存储在数组中

c# - 如何在 Linq to Sql .Where() 中写入 "OR"

c# - 如何在 C# 中定义类型变体?

c# - 从选择中排除 DataGridView 的最后一列

c# - .NET Core 2 - EF Core 错误处理保存更改

asp.net-mvc - 当我使用 asp.net mvc web api 读取 Oracle 表时出现严重错误(数据类型为 CLOB)

c# - WPF UI 允许用户构建复杂查询并输出表达式树

.net - 测试泛型类型是否实现接口(interface)并使用该接口(interface)