此查询是否等同于LEFT OUTER连接?
//assuming that I have a parameter named 'invoiceId' of type int
from c in SupportCases
let invoice = c.Invoices.FirstOrDefault(i=> i.Id == invoiceId)
where (invoiceId == 0 || invoice != null)
select new
{
Id = c.Id
, InvoiceId = invoice == null ? 0 : invoice.Id
}
Run Code Online (Sandbox Code Playgroud) 我已经读过使用ToUpper和ToLower来执行不区分大小写的字符串比较是不明智的,但是在LINQ-to-SQL方面我没有其他选择.LINQ-to-SQL忽略String.Compare的ignoreCase和CompareOptions参数(如果您使用区分大小写的数据库,即使您要求不区分大小写的比较,也会得到区分大小写的比较).ToLower或ToUpper是最好的选择吗?这个比那个好吗?我以为我读过ToUpper更好的地方,但我不知道这是否适用于此.(我正在进行大量的代码审查,每个人都在使用ToLower.)
Dim s = From row In context.Table Where String.Compare(row.Name, "test", StringComparison.InvariantCultureIgnoreCase) = 0
Run Code Online (Sandbox Code Playgroud)
这转换为一个SQL查询,它简单地将row.Name与"test"进行比较,并且不会在区分大小写的数据库上返回"Test"和"TEST".
鉴于:
以TABLE_1下列列命名的表:
IDColumnAColumnBColumnC我有SQL查询,其中TABLE_1对自己加入基于两次关闭的ColumnA,ColumnB,ColumnC.查询可能如下所示:
Select t1.ID, t2.ID, t3.ID
From TABLE_1 t1
Left Join TABLE_1 t2 On
t1.ColumnA = t2.ColumnA
And t1.ColumnB = t2.ColumnB
And t1.ColumnC = t2.ColumnC
Left Join TABLE_1 t3 On
t2.ColumnA = t3.ColumnA
And t2.ColumnB = t3.ColumnB
And t2.ColumnC = t3.ColumnC
... and query continues on etc.
Run Code Online (Sandbox Code Playgroud)
问题:
我需要在LINQ中重写Query.我试过去刺它:
var query =
from t1 in myTABLE1List // List<TABLE_1>
join t2 in myTABLE1List
on t1.ColumnA equals …Run Code Online (Sandbox Code Playgroud) 作为一个没有在现实世界项目中使用这两种技术的人,我想知道是否有人知道这两者如何相互补充以及它们的功能重叠多少?
如何使用LINQ to SQL执行CROSS JOIN?
我有一个表'lasttraces',带有以下字段.
Id, AccountId, Version, DownloadNo, Date
Run Code Online (Sandbox Code Playgroud)
数据如下所示:
28092|15240000|1.0.7.1782|2009040004731|2009-01-20 13:10:22.000
28094|61615000|1.0.7.1782|2009040007696|2009-01-20 13:11:38.000
28095|95317000|1.0.7.1782|2009040007695|2009-01-20 13:10:18.000
28101|15240000|1.0.7.1782|2009040004740|2009-01-20 14:10:22.000
28103|61615000|1.0.7.1782|2009040007690|2009-01-20 14:11:38.000
28104|95317000|1.0.7.1782|2009040007710|2009-01-20 14:10:18.000
Run Code Online (Sandbox Code Playgroud)
在LINQ to SQL中,我怎样才能获得每个AccountId(具有最高日期的那个)的最后一个lasttrace?
我应该使用LINQ Skip()和Take()方法进行分页,还是使用SQL查询实现自己的分页?
哪个最有效?为什么我会选择一个而不是另一个?
我正在使用SQL Server 2008,ASP.NET MVC和LINQ.
当我有条件时,使用Linq to SQL检索随机行的最佳(和最快)方法是什么,例如某些字段必须为true?
所以,每迈赫达德的回答一个相关的问题,我得到它是一个"正确"的数据库表列中不存储列表.相反,您应该创建另一个表,该表有效地保存所述列表的元素,然后直接或通过联结表链接到它.但是,我想要创建的列表类型将由唯一项组成(与链接问题的结果不同)例).此外,列表中的项目是显式排序的 - 这意味着如果我将元素存储在另一个表中,我每次访问它时都必须对它们进行排序.最后,该列表基本上是原子的,因为任何时候我希望访问列表,我将要访问整个列表而不仅仅是它的一部分 - 因此,必须发出数据库查询以聚集在一起的部分似乎很愚蠢列表.
AKX的解决方案(上面链接)是序列化列表并将其存储在二进制列中.但这似乎也不方便,因为这意味着我不得不担心序列化和反序列化.
有没有更好的解决方案?如果是没有更好的解决办法,那么为什么呢?看来这个问题应该不时出现.
...更多信息让你知道我来自哪里.一旦我刚刚开始理解SQL和数据库,我就开始使用LINQ to SQL了,所以现在我有点被宠坏了因为我希望能够处理我的编程对象模型而不必考虑对象如何被查询或存储在数据库中.
谢谢大家!
约翰
更新:所以在我得到的第一批答案中,我看到"你可以使用CSV/XML路线......但不要!".所以现在我正在寻找原因的解释.请给我一些很好的参考.
另外,为了让您更好地了解我的目标:在我的数据库中,我有一个Function表,它将包含(x,y)对的列表.(该表还有其他信息对我们的讨论没有影响.)我永远不需要看到(x,y)对列表的一部分.相反,我将采取所有这些并在屏幕上绘制它们.我将允许用户拖动节点以偶尔更改值或向绘图添加更多值.
linq-to-sql ×10
linq ×6
.net ×5
c# ×5
sql ×3
asp.net-mvc ×1
cross-join ×1
database ×1
left-join ×1
linqpad ×1
nhibernate ×1
orm ×1
pagination ×1
sql-server ×1
vb.net ×1