我最近升级到了VS 2010,正在玩LINQ to Dataset.我有一个强大的类型化的Authorization数据集,它位于ASP.NET WebApplication的HttpCache中.
所以我想知道实际上检查用户是否有权做某事的最快方法.如果有人感兴趣的话,这是我的数据模型和其他一些信息.
我检查了3种方法:
这些是每个函数1000次调用的结果:
1.Iteration:
2.Iteration:
3.Iteration:
平均:
为什么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) 使用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'类型,因为它不是委托类型
在此先感谢您的帮助
只是让我了解所有这些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对此是完美的(我是对的吗?),但似乎无法构造正确的查询.
任何人都可以提供一些代码示例,指出我正确的方向吗?我四处搜寻 - 但似乎没有到达任何地方.
您好我如何使用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) 我试图基于多个列(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到数据集?
我有一个这样的数据表:
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完成它.
这非常令人困惑,我使用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世界的新手并且正在探索它.我正在考虑在我的下一个涉及数据库交互的项目中使用它.
从我读过的内容来看,我认为有两种不同的方式与数据库进行交互:
现在我要研究的产品,不能依赖于数据库的类型.例如,它可能与SQL server/Oracle一起部署.
现在我的问题是:
我有一个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
linq-to-dataset ×10
linq ×8
c# ×6
.net ×2
asp.net ×2
linq-to-sql ×2
data-binding ×1
datagridview ×1
datatable ×1
distinct ×1
join ×1
performance ×1
vb.net ×1