【问题标题】:Optimal Way to Link Multiple Arrays in C# ASP.net在 C# ASP.net 中链接多个数组的最佳方法
【发布时间】:2010-11-10 16:41:39
【问题描述】:

我有 3 个来自网络服务的数组...

Countries : Consists of Key - Value
Regions   : Consists of Id - Name - CountryCode(fk: countries)
Areas     : Consists of Id - Name - CountryCode - RegionID(fk: regions)

(fk 只是显示它的信息位,外键,将其关联到前一个数组)

我一直坚持将这些链接在一起的最佳方式(最佳方式)是什么,LINQ Joining 看起来很头疼,我不确定 HashSets。

有什么想法吗?

*** Additional;* 这将作为 APP 存储在应用程序状态中,因为它需要每天刷新一次(在我看来,通过每天刷新一次应用程序比存储在数据库和基于日期标记的更新。

【问题讨论】:

  • 没有像c#3.5这样的动物
  • 应该是 C#3.0 .net3.5 证明检查失败

标签: c# asp.net-mvc .net-3.5 c#-3.0


【解决方案1】:

Linq 连接真的没那么糟糕,语法一开始有点搞笑,但你很快就习惯了。

【讨论】:

    【解决方案2】:

    我很好奇你为什么说 LINQ 连接看起来很头疼:这正是 LINQ to Objects 的用途(查询内存中的对象并提供这些对象之间的连接等服务)。

    LINQ 的一个潜在缺点是性能开销,但老实说,它还没有成为我的主要问题。

    语法就是from obj1 in source1 join obj2 in source2 on <conditional> select {obj1.prop, obj2.prop}

    这在很大程度上反映了 SQL,这是本意。

    (使用您的示例:

    from a in Areas
    join r in Regions 
     on a.RegionID equals r.Id
    join c in Countries 
     on r.CountryCode equals  c.Key
    select new {c.Value, r.Name, a.Name, a.Id };
    

    )

    【讨论】:

    • 要缓存它以供以后使用,您需要定义一个包含这些属性的扁平类型并将 LINQ 包装在 (...).ToList() 中,这样它就不会在每次请求时都延迟执行。跨度>
    • Jason 关于避免相当轻微的性能损失的方法是正确的。匿名类型(例如在这里使用 new { } 创建的)工作得很好,坦率地说,当我在浏览器窗口中疯狂输入时,我很少为自定义类而烦恼:-P
    • @Godeke:我的想法是对的 == 应该等于? var commonRAR = from a in dAreas join r in dRegions on a.RegionID 等于 r.Id join c in dCountries on r.CountryCode 等于 c.Key select new {c.Value, r.Name, a.Name, a.Id } ;离开 - msdn.microsoft.com/en-us/library/bb384085.aspx
    • 是的,我习惯于使用 LLBLGen,它可以让我通过超载摆脱这种情况。在正文中更正。
    【解决方案3】:

    您不能将它们转储到DataSet 吗?这是DataTables 的集合,您可以为其预定义Relations

    private void CreateRelation() 
    {
        // Get the DataColumn objects from two DataTable objects 
        // in a DataSet. Code to get the DataSet not shown here.
        DataColumn parentColumn = 
            DataSet1.Tables["Customers"].Columns["CustID"];
        DataColumn childColumn = 
            DataSet1.Tables["Orders"].Columns["CustID"];
        // Create DataRelation.
        DataRelation relCustOrder;
        relCustOrder = new DataRelation("CustomersOrders", 
            parentColumn, childColumn);
        // Add the relation to the DataSet.
        DataSet1.Relations.Add(relCustOrder);
    }
    

    【讨论】:

      猜你喜欢
      • 2010-09-29
      • 1970-01-01
      • 2011-06-16
      • 2011-04-12
      • 1970-01-01
      • 2013-09-05
      • 2020-11-24
      • 2019-09-24
      • 1970-01-01
      相关资源
      最近更新 更多