Tag: linq to sql

LINQ to SQL:“UpdateCheck = Never”时不刷新更新

我有一个帐户实体,除了一个字段外,其中包含“UpdateCheck = Never”中的所有字段。 “ModifiedTime”字段使用“UpdateCheck = Always”。 目的是 – 并发检查应仅基于“ModifiedTime”列。 出于测试目的,我提供了用C#代码硬编码的“ModifiedTime”值。 因此,无需从数据库中获取任何值以实现并发性。 只有当我调用Refresh方法时,代码才会更新数据库。 这看起来很奇怪。 有什么方法可以避免这个吗 请参阅http://msdn.microsoft.com/en-us/library/bb386929.aspx中的 “不使用查询进行更新”部分 注意:我试图通过不使用Refresh来避免SELECT语句 生成的SQL SELECT [t0].[AccountNumber], [t0].[AccountType], [t0].[Duration], [t0].[DepositedAmount], [t0].[Prefernce], [t0].[Comment], [t0].[ModifiedTime] FROM [dbo].[Account] AS [t0] WHERE [t0].[AccountNumber] = @p0 — @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [1] — Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1 […]

优化存储库的SubmitChanges方法

我有以下存储库。 我使用工厂在LINQ 2 SQL生成的类和域对象之间进行映射。 以下代码将起作用; 但我看到两个潜在的问题 1)它在更新语句之前使用SELECT查询。 2)它需要更新所有列(不仅是更改的列)。 这是因为我们不知道域对象中所有列的更改。 如何克服这些缺点? 注意:可能存在基于特定列更新执行的方案(如触发器)。 所以我不能不必要地更新列。 参考 : LINQ to SQL:“UpdateCheck = Never”时不刷新更新 http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=113917 码 namespace RepositoryLayer { public interface ILijosBankRepository { void SubmitChangesForEntity(); } public class LijosSimpleBankRepository : ILijosBankRepository { private IBankAccountFactory bankFactory = new MySimpleBankAccountFactory(); public System.Data.Linq.DataContext Context { get; set; } public virtual void SubmitChangesForEntity(DomainEntitiesForBank.IBankAccount iBankAcc) […]

|| 使用C#的Linq中的(或)运算符

我正在使用linq过滤选择的MessageItems。 我编写的方法接受一堆可能为null的参数。 如果它们为null,则应忽略该文件的条件。 如果它不为null,则使用它来过滤结果。 这是我的理解,当做一个|| operation是C#,如果第一个表达式为true,则不应计算第二个表达式。 例如 if(ExpressionOne() || ExpressionTwo()) { // only ExpressionOne was evaluated because it was true } 现在,在linq,我正在尝试这个: var messages = (from msg in dc.MessageItems where String.IsNullOrEmpty(fromname) || (!String.IsNullOrEmpty(fromname) && msg.FromName.ToLower().Contains(fromname.ToLower())) select msg); 我原以为这会是合理的,因为String.IsNullOrEmpty(fromname)将等于true而String.IsNullOrEmpty(fromname)的第二部分 不会跑。 然而,它确实运行,第二部分 msg.FromName.ToLower().Contains(fromname.ToLower())) 抛出空引用exception(因为fromname为null)!! – 我得到一个经典的“对象引用未设置为对象的实例”exception。 有帮助吗?

DISTINCT()和ORDERBY问题

我正在学习LINQ-to-SQL,一切都很顺利,直到发生奇怪的事情: 我试着做一个distinct的例子,所以,使用Northwind dabatase我写了以下查询: var query = from o in db.Orders orderby o.CustomerID select new { o.CustomerID }; 如果我打印LINQ-to-SQL为查询中存储的query生成的SQL,它看起来像这样: SELECT [t0].[CustomerID] FROM [dbo].[Orders] AS [t0] ORDER BY [t0].[CustomerID] 因此,像往常一样,查询会按字母顺序排列Orders表中每个Order所有CustomerID 。 但! 如果我像这样使用Distinct()方法: var query = ( from o in db.Orders orderby o.CustomerID select new { o.CustomerID }).Distinct(); 该查询带来了Distinct子句的预期结果,但是尽管我通过orderby o.CustomerID编写了orderby o.CustomerID ,但是没有订购CustomerID ! 第二个LINQ查询的SQL查询如下: SELECT DISTINCT [t0].[CustomerID] […]

Linq IN运营商

我试过搜索这个,但找不到适合我情况的例子。 我有这种方法给回头客。 如何使用字符串数组代码进行过滤? 包含对我不起作用。 public static List GetCustomers(string[] customerCodesArray) { using (busDataContext g = new busDataContext()) { return g.Customers.Where( x => x.customerCode.Contains(customerCodesArray)).ToList(); } }

您是否可以说服DataContext将列视为始终脏?

有没有办法强制LINQ-to-SQL将列视为脏? 在全球范围内就足够了…. 基本上,我在遗留系统上的一些审计代码遇到问题,我正在与L2S交谈,想象一下: var ctx = new SomeDataContext(); // disposed etc – keeping it simple for illustration var cust = ctx.Customers.First(); // just for illustration cust.SomeRandomProperty = 17; // whatever cust.LastUpdated = DateTime.UtcNowl; cust.UpdatedBy = currentUser; ctx.SubmitChanges(); // uses auto-generated TSQL 这很好,但是如果同一个用户连续两次更新它,则UpdatedBy是NOP,而TSQL将是(粗略地): UPDATE [dbo].[Customers] SET SomeRandomColumn = @p0 , LastUpdated = @p1 — note no […]

linq to sql递归查询

EmployeeId Name ManagerId —————————— 1 A null 2 B null 3 C 1 4 D 3 5 E 2 只是使用这个表,如何编写linq查询(使用linq to sql)来递归获取父数据。 例如,如果选择的雇主ID为4,则应该给出Id:4,3,1的雇员列表 谢谢。

将SQL Rank()转换为LINQ,或替代

我有下面的SQL语句,可以按预期/预期工作。 但是我想将它翻译成LINQ语句(Lambda ??),以便它适合我的其余DAL。 但是我无法弄清楚如何在LINQ中模拟Rank()。 我在这里发布它的原因,可能是错误的,是看看是否有人可以替换Rank()语句,以便我可以切换它。 或者,如果有一种方法可以在LINQ中表示Rank() ,也可以理解。 USE CMO SELECT vp.[PersonID] AS [PersonId] ,ce.[EnrollmentID] ,vp.[FirstName] ,vp.[LastName] ,ce.[EnrollmentDate] ,ce.[DisenrollmentDate] ,wh.WorkerCategory FROM [dbo].[vwPersonInfo] AS vp INNER JOIN ( [dbo].[tblCMOEnrollment] AS ce LEFT OUTER JOIN ( SELECT * ,RANK()OVER(PARTITION BY EnrollmentID ORDER BY CASE WHEN EndDate IS NULL THEN 1 ELSE 2 END, EndDate DESC, StartDate DESC) AS […]

如果可能有空集,如何进行Linq聚合?

我有一个Linq的Things集合,其中Thing有一个Amount (十进制)属性。 我正在尝试针对特定事物的子集对此进行聚合: var total = myThings.Sum(t => t.Amount); 这很好用。 但后来我添加了一个条件,让我在结果中没有任何东西: var total = myThings.Where(t => t.OtherProperty == 123).Sum(t => t.Amount); 而不是得到total = 0或null,我得到一个错误: System.InvalidOperationException:无法将null值分配给类型为System.Decimal的成员,该成员是非可空值类型。 这真是令人讨厌,因为我没想到这种行为。 我本来期望总数为零,也许是null – 但肯定不会抛出exception! 我究竟做错了什么? 什么是解决方法/修复? 编辑 – 例子 感谢大家的评论。 这是一些代码,复制和粘贴(不简化)。 这是LinqToSql(也许这就是为什么你无法重现我的问题): var claims = Claim.Where(cl => cl.ID cl.ClaimedAmount); // throws exception

LINQ to SQL查询中的自定义方法

是否可以使用自定义方法在查询中例如: var result = from u in context.MyTable where MyMethod(u) == 10 select u;