标签: linq-to-dataset

为什么LINQ JOIN比使用WHERE链接要快得多?

我最近升级到了VS 2010,正在玩LINQ to Dataset.我有一个强大的类型化的Authorization数据集,它位于ASP.NET WebApplication的HttpCache中.

所以我想知道实际上检查用户是否有权做某事的最快方法.如果有人感兴趣的话,是我的数据模型和其他一些信息.

我检查了3种方法:

  1. 直接数据库
  2. LINQ查询的Where条件为"Join" - 语法
  3. 带有Join的 LINQ查询- 语法

这些是每个函数1000次调用的结果:

1.Iteration:

  1. 4,2841519秒
  2. 115,7796925秒
  3. 2,024749秒

2.Iteration:

  1. 3,1954857秒
  2. 84,97047秒
  3. 1,5783397秒

3.Iteration:

  1. 2,7922143秒
  2. 97,8713267秒
  3. 1,8432163秒

平均:

  1. 数据库:3,4239506333秒.
  2. 其中:99,5404964秒.
  3. 加入:1,815435秒.

为什么Join-version比where-syntax快得多,这使得它无用尽管作为LINQ新手它似乎是最清晰的.或者我在查询中遗漏了什么?

这是LINQ查询,我跳过数据库:

地点:

Public Function hasAccessDS_Where(ByVal accessRule As String) As Boolean
    Dim userID As Guid = DirectCast(Membership.GetUser.ProviderUserKey, Guid)
    Dim query = From accRule In Authorization.dsAuth.aspnet_AccessRule, _
                roleAccRule In Authorization.dsAuth.aspnet_RoleAccessRule, _
                role In Authorization.dsAuth.aspnet_Roles, _
                userRole In Authorization.dsAuth.aspnet_UsersInRoles _
                Where accRule.idAccessRule = roleAccRule.fiAccessRule …
Run Code Online (Sandbox Code Playgroud)

.net linq performance join linq-to-dataset

96
推荐指数
3
解决办法
2万
查看次数

DataTable不包含AsEnumerable的定义

使用linq查询数据表返回以下错误:CS0117:'DataSet1.map DataTable'不包含'AsEnumerable'的定义

Project包含System.Data.Datasetextensions的参考.

这是代码.

using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration;
using System.Reflection;
using System.Data;
using System.Linq;
using System.Data.Linq;
using System.Data.Common;
using System.Data.DataSetExtensions;
using System.Linq.Expressions;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

protected void Page_Load(object sender, EventArgs e)
    {
        var query1 = from mfg_nm in DataSet1.mapDataTable.AsEnumerable()

                     select mfg_nm;
}
Run Code Online (Sandbox Code Playgroud)

运行它w/out AsEnumerable()导致

var query1 = from mfg_nm in DataSet1.mapDataTable

                     select mfg_nm;
Run Code Online (Sandbox Code Playgroud)

CS1660:无法将lambda表达式转换为'string'类型,因为它不是委托类型

在此先感谢您的帮助

c# asp.net linq-to-dataset

38
推荐指数
4
解决办法
6万
查看次数

使用LINQ从数据集中选择单列

只是让我了解所有这些LINQ的东西,似乎我陷入了第一个障碍.

我有一个数据表:

OrderNo     LetterGroup Filepath
----------- ----------- --------------------------------------------------
0           0           Letters/SampleImage.jpg
0           0           Letters/UKPC7_0.jpg
0           0           Letters/UKPC8_0.jpg
Run Code Online (Sandbox Code Playgroud)

我需要的是将Filepath列中的所有文件路径都放入String数组中.我认为LINQ对此是完美的(我是对的吗?),但似乎无法构造正确的查询.

任何人都可以提供一些代码示例,指出我正确的方向吗?我四处搜寻 - 但似乎没有到达任何地方.

c# linq linq-to-dataset

21
推荐指数
2
解决办法
6万
查看次数

如何使用Linq将dataTable过滤到数据表?

您好我如何使用linq过滤数据表到数据表?我有一个DropDownList,我可以选择模块列的值.现在我想用这个模块列过滤DataTable.

这是我的数据表结构:

User | Host | TimeDiff | License | Telefon | Modul 
Run Code Online (Sandbox Code Playgroud)

这里的代码:

protected void drp_Modules_SelectedIndexChanged(object sender, EventArgs e)
{
    string value = drp_Modules.SelectedValue;

    DataTable tb = (DataTable)Session["dt_Users"];

    tb = from item in tb //?????

    LoadUsertable(tb);
}
Run Code Online (Sandbox Code Playgroud)

c# linq asp.net datatable linq-to-dataset

18
推荐指数
1
解决办法
6万
查看次数

从Linq中的数据表中选择不同的行

我试图基于多个列(attribute1_name,attribute2_name)获取不同的行,并使用Linq-to-Dataset从datatable获取数据行.

截图

我想要这样的结果

attribute1_name    attribute2_name
--------------     ---------------

Age                State
Age                weekend_percent
Age                statebreaklaw
Age                Annual Sales
Age                Assortment
Run Code Online (Sandbox Code Playgroud)

如何做薄Linq到数据集?

c# linq vb.net linq-to-dataset

16
推荐指数
2
解决办法
12万
查看次数

Linq查询按组加总

我有一个这样的数据表:

Category         Description       CurrentHours      CTDHours  
LC1              Cat One                 5               0  
LC2              Cat Two                 6               0  
LC3              Cat Three              18               0  
LC1              Cat One                 0               9  
LC2              Cat Two                 0              15  
LC4              Cat Four                0              21  
Run Code Online (Sandbox Code Playgroud)

我需要对此进行分组和求和:

Category         Description       CurrentHours      CTDHours  
LC1              Cat One                 5              14  
LC2              Cat Two                 6              21  
LC3              Cat Three              18               0  
LC4              Cat Four                0              21  
Run Code Online (Sandbox Code Playgroud)

换句话说,我需要按类别和说明列对两小时列分组进行求和.

我知道我可以构建一个新表并循环遍历现有数据并将数据汇总到新表中,但我认为使用Linq可以更容易地实现它.我用谷歌搜索了几个小时,但我发现的所有例子似乎都不符合我的想法.

顺便说一句,创建数据表的odbc驱动程序没有子查询等功能,或者我只是使用SQL完成它.

c# linq linq-to-dataset

13
推荐指数
1
解决办法
5万
查看次数

LINQ to DataSet,由多列区分

只是想检查是否有多种方法可以区分多个列.提前致谢!!!

顺便说一句,我在这里找到了一个很棒的LINQ扩展,但需要一些指导才能将它用于多列

linq distinct linq-to-dataset

10
推荐指数
3
解决办法
3万
查看次数

将LINQ查询绑定到DataGridView

这非常令人困惑,我使用AsDataView将查询结果绑定到dgv,它可以正常使用以下内容:

var query = from c in myDatabaseDataSet.Diamond where c.p_Id == p_Id select c;
dataGridView1.DataSource = query.AsDataView();
Run Code Online (Sandbox Code Playgroud)

但是,这会导致错误:

var query = from item in myDatabaseDataSet.Items
    where item.p_Id == p_Id
    join diamond in myDatabaseDataSet.Diamond
        on item.p_Id equals diamond.p_Id
    join category in myDatabaseDataSet.DiamondCategory
        on diamond.dc_Id equals category.dc_Id
    select new
    {
        Product = item.p_Name,
        Weight = diamond.d_Weight,
        Category = category.dc_Name
    };

    dataGridView1.DataSource = query.AsDataView();
Run Code Online (Sandbox Code Playgroud)

错误:

Instance argument: cannot convert from
'System.Collections.Generic.IEnumerable<AnonymousType#1>' to 
'System.Data.DataTable'
Run Code Online (Sandbox Code Playgroud)

AsDataView不会出现在查询中.(列表).为什么会这样?如何将上面的查询绑定到dgv呢?

linq data-binding datagridview linq-to-dataset linq-to-sql

10
推荐指数
1
解决办法
3万
查看次数

Linq to SQL或Linq to DataSet?

我是Linq世界的新手并且正在探索它.我正在考虑在我的下一个涉及数据库交互的项目中使用它.

从我读过的内容来看,我认为有两种不同的方式与数据库进行交互:

  • Linq to SQL
  • Linq到DataSet

现在我要研究的产品,不能依赖于数据库的类型.例如,它可能与SQL server/Oracle一起部署.

现在我的问题是:

  1. 如果我使用Linq to SQL,我是否只使用SQL服务器?
  2. 我想我可以将Linq用于SQL Server和Oracle的DataSet.但是如果我使用Linq to DataSet for SQL server(与Linq to SQL offcourse相比),我会失去一些东西(编程的容易程度,性能,可靠性等).

.net linq linq-to-dataset linq-to-sql

9
推荐指数
1
解决办法
1万
查看次数

使用SQLCeResultSet更新/插入表

我有一个SQL Compact Edition数据库,我定期更新(通过Web服务).

我写入数据库的部分太长了.我目前正在使用Linq to Datasets(如本问题所示).我听说如果我使用SQLCeResultSet这样做会更快.

所以,鉴于我有一个这样的表:

tblClient
   +- CLIENT_ID      {Unique identifier} (Primary Key)
   +- CLIENT_NAME    {varchar (100)}
   +- CLIENT_ACTIVE  {bit}

我从我的Web服务获得的对象看起来像这样:

class Client
{
   public Guid ClientID { get; set; }
   public String ClientName { get; set; }
   public bool Active { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何将100个Client对象导入数据库?

更新现有行并插入数据库中尚未存在的行(由主键确定)?

任何示例代码都会很棒.我有SqlCeConnection,但没有别的.

谢谢你的帮助!

c# compact-framework windows-mobile linq-to-dataset sql-server-ce

8
推荐指数
1
解决办法
6686
查看次数