Tag: linq to sql

是否有LINQ等效的string.Join(string,string )

有没有办法使用LINQ将对象集合转换为单个新对象? 我想在另一个LINQ to SQL表达式中使用它。

从LINQ表达式中提取sql查询

是否可以从LINQ查询中提取sql语句? 说,我有这个LINQ表达式。 string[] names = new string[] { “Jon Skeet”, “Marc Gravell”, “tvanfosson”, “cletus”, “Greg Hewgill”, “JaredPar” }; var results = from name in names where name.StartsWith(“J”) select name; alt text http://ruchitsurati.net/files/linq-debugging.png 在此语句之后,’results’仅保留LINQ表达式而不是由于LINQ查询的延迟执行而导致的结果。 我可以从’结果’中提取或生成LINQ查询,并从存储在’LINQ’中的查询中准备一个有效的SQL语句吗? 编辑 这是我的目标: 我们已经编写了自己的ORM。 我们每次需要进行数据库操作时都必须编写查询。 现在我们需要在DAL摆脱它。 我们希望在代码中编写LINQ表达式,它将针对我的ORM生成SQL语句,我们将在数据库上执行此SQL。 我是否愿意编写我的定制Linq提供商来做我需要的事情?

如何确定Linq-To-Sql对象中哪些字段已更改

我有一个linq-to-sql数据库,我想在其中记录对实体所做的一些更改。 现在,我通过读取DataContext.GetChangeSet()。Updates属性来获取更新的实体,但这并没有为我提供已更改的实体的字段。 有没有办法知道在更新的实体中修改了哪些字段? 谢谢

Listpicker错误SelectedItem必须始终设置为有效值

我在Windows Phone 7应用程序中有一个页面,用户可以在其中编辑或删除Transaction对象。 Transaction对象是一个Linq-to-Sql类,它与Account类和Category类有关系。 在页面中,我使用ListPicker让用户选择给定事务的帐户和类别,如下所示: ListPicker_Tap事件是针对Windows Phone的WPF Toolkit的Aug / 2011版本中的错误的修复,简单地说: private void ListPicker_Tap(object sender, System.Windows.Input.GestureEventArgs e) { ListPicker lp = (ListPicker)sender; lp.Open(); } 如果用户编辑事务,一切都很好,但如果用户尝试删除它,我会收到一条错误消息,说“SelectedItem必须始终设置为有效值”。 如果用户单击TransactionPage.xaml.cs中appbar中的delete按钮,则代码如下: private void appBarDelete_Click(object sender, EventArgs e) { MessageBoxResult result = MessageBox.Show(“Are you sure?\n”, “Confirm”, MessageBoxButton.OKCancel); if (result == MessageBoxResult.OK) { App.ViewModel.DeleteTransaction(transaction); } NavigationService.GoBack(); } 我的ViewModel.DeleteTransaction方法: public void DeleteTransaction(Transaction transaction) { […]

可以为空的对象必须有值吗?

在线: bool travel = fill.travel.Value; 我收到以下错误: 可以为空的对象必须具有值 而且我不确定为什么。 我想要做的就是获取当前错误的旅行数据库中的值。 任何帮助,将不胜感激。 using (var db = new DataClasses1DataContext()) { var fill = (from f in db.expenseHdrs where f.rptNo == getPkRowReport() select f).FirstOrDefault(); txtReportDesc.Text = fill.description; txtPeriod.Text = fill.period; txtPurpose.Text = fill.purpose; bool travel = fill.travel.Value; chkTravel.Checked = travel }

Linq行未找到或更改

Error Message: Row not found or changed. Stack Trace: at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode) at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode) 这似乎是随机发生的。 我通过电子邮件发送了这些错误,并且报告的URL似乎总是对我有用,并且应该也适用于其他所有人。 我可以通过以下方式解决此错误 转到我的dbml布局 选择表中的每个字段都会导致冲突 右键单击并将属性Update Check设置为Never 这似乎可以防止抛出这些类型的错误。 但是,每当我有机会进入dmbl ,添加新表等时,记住继续这样做是很费力的。有没有更好的方法来解决这个问题? 我每天可能会得到50-100这对我的访客来说很糟糕。

奇怪的LINQexception(索引超出范围)

我有一张桌子,我们会打电话给Users 。 此表具有在SQL Server中定义的单个主键 – autoincrement int ID 。 有时,我对这个表的LINQ查询失败, “Index was outside the range”错误 – 即使是最简单的查询。 查询本身不使用任何索引器。 例如: User = Users.Take(1); 要么 IEnumerable = Users.ToList(); 两个查询都抛出了同样的错误。 使用调试器Visualizer查看生成的查询 – 我在SQL中复制并粘贴查询,它工作正常。 我也点击了可视化工具上的“执行”,它工作正常。 但是,执行代码本身会引发此错误。 我没有在类上实现任何部分方法,所以没有任何事情发生在那里。 如果我重新启动我的调试器,问题就会消失,几个小时之后再次随机地重新调整它。 更重要的是,我在生产中运行的应用程序的错误日志中看到了这个错误。 我在我的应用程序中对我的数据库中的十几个不同的实体进行了大量的LINQ,但我只在与表中的特定实体相关的查询中看到此问题。 一些谷歌搜索表明这个问题可能与我的模型和另一个实体之间指定的错误关系有关,但我与此对象没有任何关系。 它似乎在95%的时间工作,只是其他5%的失败。 我已经从设计器中完全删除了该对象,并从“刷新的”服务器浏览器重新添加了该对象,但这并没有解决问题。 有什么想法在这里发生了什么? 这是完整的错误消息和堆栈跟踪: 指数超出范围。 必须是非负数且小于集合的大小。 参数名称:System.Data.Linq的System.Data.Linq.SqlClient.SqlProvider.Execute(表达式查询,QueryInfo queryInfo,IObjectReaderFactory工厂,Object [] parentArgs,Object [] userArgs,ICompiledSubQuery [] subQueries,Object lastResult)的索引System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute中的.SqlClient.SqlProvider.ExecuteAll(Expression query,QueryInfo [] queryInfos,IObjectReaderFactory […]

如何重用Linq To Sql查询中的where子句

我有用户搜索记录类型的记录。 他们在文本框中键入搜索词,然后通过将多个字段与搜索词匹配来搜索记录。 我的查询看起来像: var results = from record in DataContext.Records where record.Field1.ToLower().Contains(term) || record.Field2.ToLower().Contains(term) || record.Field3.ToLower().Contains(term) select record; 我有许多查询都使用相同的filter,因此我想提取过滤,以便可以重复使用。 就像是: var filter = new Func( (record, term) => record.Field1.ToLower().Contains(term) || record.Field2.ToLower().Contains(term) || record.Field3.ToLower().Contains(term) ); var results = from record in DataContext.Records where filter(record, term) select record; 但是,它不起作用,因为: 方法’System.Object DynamicInvoke(System.Object [])’没有受支持的SQL转换。 如何跨查询重用where where条件?

C#如何将Expression <Func >转换为Expression <Func >

我之前使用过基于lamdas的C#表达式,但我没有手工编写它们的经验。 给定一个Expression<Func> originalPredicate ,我想创建一个Expression<Func> translatedPredicate 。 在这种情况下,SomeType和OtherType具有相同的字段,但它们不相关(没有inheritance而不是基于公共接口)。 背景:我有一个基于LINQ to SQL的存储库实现。 我将LINQ to SQL实体投影到我的Model实体,以便将我的模型保存在POCO中。 我想将表达式传递给存储库(作为规范的一种forms),但它们应该基于模型实体。 但我无法将这些表达式传递给数据上下文,因为它需要基于LINQ to SQL实体的表达式。

C#,Linq2Sql:是否可以将两个可查询连接成一个?

我有一个可查询的地方,我使用各种Where和WhereBetween语句将集合缩小到某个集合。 现在我需要添加一个Where || WhereBetween Where || WhereBetween 。 换句话说,我不能像现在一样把它们连在一起,因为它可以作为一个And。 那么,我该怎么做呢? 我看到两种可能性: 从我拥有的一个查询中创建两个查询 ,一个使用Where ,一个使用WhereBetween 。 然后将它们连接起来 。 不知道这是否可能? 此外,虽然不是在我的特定情况下,你很可能最终会重复… 以某种方式合并Where表达式和WhereBetween创建的表达式 。 首先,如上所述,我不确定是否可能。 如果是的话,我不太确定这是一个很好的方法。 第二,我可以看到一个选项,但不完全确定所有的细节。 下面是我的另一个问题中的WhereBetween方法,我现在使用它并且效果很好: public static IQueryable WhereBetween( this IQueryable source, Expression<Func> selector, IEnumerable<Range> ranges) { var param = Expression.Parameter(typeof(TSource), “x”); var member = Expression.Invoke(selector, param); Expression body = null; foreach (var range in […]