标签: linq-to-sql

192
推荐指数
7
解决办法
17万
查看次数

了解LINQ

概观

LINQ,我在网站上提出了很多问题.我提出的问题范围广泛而且多种多样,往往背后没有太多背景.因此,为了巩固我在Linq上获得的知识,我发布了这个问题,以便在我继续学习LINQ时使用其他信息来维护和更新它.

我也希望它能够成为想要了解LINQ的其他人的有用资源.

什么是LINQ?

来自MSDN:

LINQ项目是.NET Framework的一组扩展的代号,包含语言集成的查询,设置和转换操作.它使用本机语言语法扩展C#和Visual Basic,并提供类库以利用这些功能.

这意味着LINQ提供了一种使用通用语法查询各种数据源的标准方法.

LINQ有哪些口味?

目前,Microsoft提供了一些不同的LINQ提供程序:

还有很多其他的,其中许多列在这里.

有什么好处?

  • 查询多个数据源的标准化方法
  • 编译查询的时间安全性
  • 在内存对象中执行基于集合的操作的优化方法
  • 能够调试查询

那么LINQ怎么办?

Chook提供了一种输出CSV文件的方法
Jeff显示了如何从数组中删除重复项
Bob 从数据表中获取一个不同的有序列表
Marxidad显示了如何对数组进行排序
Dana获得了使用Linq实现快速排序的帮助

从哪儿开始?

GateKiller的问题链接摘要如下:
Scott Guthrie 在他的博客上为Linq提供了一个介绍MSDN
LINQ的概述

ChrisAnnODell建议退房:

linq linq-to-objects linq-to-entities linq-to-sql

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

LINQ-to-SQL vs存储过程?

我在StackOverflow(LINQ初学者指南)上看了一下"LINQ 初学者指南",但有一个后续问题:

我们即将推出一个新项目,几乎所有的数据库操作都将是相当简单的数据检索(项目的另一部分已经编写了数据).到目前为止,我们的大多数其他项目都使用存储过程来处理这些事情.但是,如果它更有意义,我想利用LINQ-to-SQL.

所以,问题是:对于简单的数据检索,哪种方法更好,LINQ-to-SQL或存储过程?任何具体的专业人士或骗子?

谢谢.

linq stored-procedures linq-to-sql

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

返回匿名类型结果?

使用下面的简单示例,使用Linq to SQL从多个表返回结果的最佳方法是什么?

说我有两张桌子:

Dogs:   Name, Age, BreedId
Breeds: BreedId, BreedName
Run Code Online (Sandbox Code Playgroud)

我想用他们的狗归还所有的狗BreedName.我应该让所有的狗使用这样的东西没有问题:

public IQueryable<Dog> GetDogs()
{
    var db = new DogDataContext(ConnectString);
    var result = from d in db.Dogs
                 join b in db.Breeds on d.BreedId equals b.BreedId
                 select d;
    return result;
}
Run Code Online (Sandbox Code Playgroud)

但如果我想要品种的狗并尝试这个我有问题:

public IQueryable<Dog> GetDogsWithBreedNames()
{
    var db = new DogDataContext(ConnectString);
    var result = from d in db.Dogs
                 join b in db.Breeds on d.BreedId equals b.BreedId
                 select new
                        {
                            Name = d.Name,
                            BreedName = b.BreedName
                        };
    return result; …
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-sql

187
推荐指数
7
解决办法
19万
查看次数

如何使用方法语法连接linq to sql?

我在LINQ to SQL示例中看到了很多关于如何在查询语法中进行连接的示例,但我想知道如何使用方法语法来实现它?例如,我如何执行以下操作

var result = from sc in enumerableOfSomeClass
             join soc in enumerableOfSomeOtherClass
             on sc.Property1 equals soc.Property2
             select new { SomeClass = sc, SomeOtherClass = soc }
Run Code Online (Sandbox Code Playgroud)

用一个.Join()?谁能说明或提供另一个简单的例子吗?

linq-to-sql ef-fluent-api

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

LINQ插入后我可以返回'id'字段吗?

当我使用Linq-to SQL将对象输入到数据库中时,是否可以获取刚插入的ID而不进行另一次数据库调用?我假设这很容易,我只是不知道如何.

.net c# linq linq-to-sql

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

最大还是默认?

从可能不返回任何行的LINQ查询中获取Max值的最佳方法是什么?如果我这样做

Dim x = (From y In context.MyTable _
         Where y.MyField = value _
         Select y.MyCounter).Max
Run Code Online (Sandbox Code Playgroud)

当查询没有返回任何行时,我收到错误.我可以

Dim x = (From y In context.MyTable _
         Where y.MyField = value _
         Select y.MyCounter _
         Order By MyCounter Descending).FirstOrDefault
Run Code Online (Sandbox Code Playgroud)

但对于这样一个简单的请求,这感觉有点迟钝.我错过了一个更好的方法吗?

更新:这是后面的故事:我正在尝试从子表中检索下一个资格计数器(遗留系统,不要让我开始......).每个患者的第一个资格行总是1,第二个是2,等等(显然这不是子表的主键).因此,我正在为患者选择最大现有计数器值,然后向其中添加1以创建新行.当没有现有子值时,我需要查询返回0(因此添加1会给我一个计数器值1).请注意,我不想依赖子行的原始计数,以防遗留应用程序在计数器值中引入间隙(可能).我试图让这个问题过于通用我不好.

.net c# linq linq-to-sql

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

LINQ - 左连接,分组依据和计数

假设我有这个SQL:

SELECT p.ParentId, COUNT(c.ChildId)
FROM ParentTable p
  LEFT OUTER JOIN ChildTable c ON p.ParentId = c.ChildParentId
GROUP BY p.ParentId
Run Code Online (Sandbox Code Playgroud)

如何将其转换为LINQ to SQL?我被困在COUNT(c.ChildId),生成的SQL似乎总是输出COUNT(*).这是我到目前为止所得到的:

from p in context.ParentTable
join c in context.ChildTable on p.ParentId equals c.ChildParentId into j1
from j2 in j1.DefaultIfEmpty()
group j2 by p.ParentId into grouped
select new { ParentId = grouped.Key, Count = grouped.Count() }
Run Code Online (Sandbox Code Playgroud)

谢谢!

.net c# linq linq-to-sql

165
推荐指数
5
解决办法
19万
查看次数

Linq to Sql:多个左外连接

我在使用LINQ to SQL找出如何使用多个左外连接时遇到了一些麻烦.我理解如何使用一个左外连接.我正在使用VB.NET.下面是我的SQL语法.

T-SQL

SELECT
    o.OrderNumber,
    v.VendorName,
    s.StatusName
FROM
    Orders o
LEFT OUTER JOIN Vendors v ON
    v.Id = o.VendorId
LEFT OUTER JOIN Status s ON
    s.Id = o.StatusId
WHERE
    o.OrderNumber >= 100000 AND
    o.OrderNumber <= 200000
Run Code Online (Sandbox Code Playgroud)

t-sql linq vb.net left-join linq-to-sql

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

LINQ to SQL - 具有多个连接条件的左外连接

我有以下SQL,我试图将其转换为LINQ:

SELECT f.value
FROM period as p 
LEFT OUTER JOIN facts AS f ON p.id = f.periodid AND f.otherid = 17
WHERE p.companyid = 100
Run Code Online (Sandbox Code Playgroud)

我已经看到了左外连接的典型实现(即into x from y in x.DefaultIfEmpty()等),但我不确定如何引入其他连接条件(AND f.otherid = 17)

编辑

为什么AND f.otherid = 17条件是JOIN的一部分而不是WHERE子句?因为f某些行可能不存在,我仍然希望包含这些行.如果条件在WHERE子句中应用,在JOIN之后 - 那么我没有得到我想要的行为.

不幸的是:

from p in context.Periods
join f in context.Facts on p.id equals f.periodid into fg
from fgi in fg.DefaultIfEmpty()
where p.companyid == 100 && fgi.otherid == 17
select f.value
Run Code Online (Sandbox Code Playgroud)

似乎等同于:

SELECT …
Run Code Online (Sandbox Code Playgroud)

c# sql linq outer-join linq-to-sql

144
推荐指数
4
解决办法
14万
查看次数