返回IQueryable<T>与IEnumerable<T>?有什么区别?
IQueryable<Customer> custs = from c in db.Customers
where c.City == "<City>"
select c;
IEnumerable<Customer> custs = from c in db.Customers
where c.City == "<City>"
select c;
Run Code Online (Sandbox Code Playgroud)
两者都会延迟执行,何时应该优先于另一个?
我一直在寻找和之间的区别Select,SelectMany但我找不到合适的答案.我需要了解使用LINQ To SQL时的不同之处,但我发现的只是标准数组示例.
有人可以提供LINQ To SQL示例吗?
现在已经发布了.NET v3.5 SP1(以及VS2008 SP1),现在我们可以访问.NET实体框架了.
我的问题是这个.在尝试使用Entity Framework和LINQ to SQL作为ORM时,有什么区别?
我理解它的方式,实体框架(当与LINQ to Entities一起使用时)是LINQ to SQL的"大哥"?如果是这种情况 - 它有什么优势?它能做什么LINQ to SQL本身无法做到的?
考虑IEnumerable扩展方法SingleOrDefault()和FirstOrDefault()
返回序列的唯一元素,如果序列为空,则返回默认值; 如果序列中有多个元素,则此方法抛出异常.
而FirstOrDefault从MSDN(推测当使用OrderBy()或 OrderByDescending()或根本没有),
返回序列的第一个元素
考虑一些示例查询,并不总是清楚何时使用这两种方法:
var someCust = db.Customers
.SingleOrDefault(c=>c.ID == 5); //unlikely(?) to be more than one, but technically COULD BE
var bobbyCust = db.Customers
.FirstOrDefault(c=>c.FirstName == "Bobby"); //clearly could be one or many, so use First?
var latestCust = db.Customers
.OrderByDescending(x=> x.CreatedOn)
.FirstOrDefault();//Single or First, or does it matter?
Run Code Online (Sandbox Code Playgroud)
题
你遵循或暗示什么约定决定要使用时SingleOrDefault(),并FirstOrDefault()在您的LINQ查询?
我正在编写一个LINQ to SQL语句,我正在使用ONC#中的子句进行普通内连接的标准语法.
如何在LINQ to SQL中表示以下内容:
select DealerContact.*
from Dealer
inner join DealerContact on Dealer.DealerID = DealerContact.DealerID
Run Code Online (Sandbox Code Playgroud) 你会如何评价每一个:
我喜欢我的SQL,因此一直是ADO.NET和存储过程的忠实粉丝,但我最近玩过Linq to SQL,并且被写出我的DataAccess层的速度和决定花费的速度感到震惊有一段时间真正理解Linq to SQL或EF ......或者两者都没有?
我只是想检查一下,这些技术中没有一个很大的缺陷会让我的研究时间变得毫无用处.例如,性能非常糟糕,对于简单的应用程序来说它很酷,但只能带你到目前为止.
更新: 您可以专注于EF VS L2S VS SP而不是ORM VS SP.我主要对EF VS L2S感兴趣.但我很想将它们与存储过程进行比较,因为普通的SQl是我所了解的很多东西.
我想使用Linq to SQL向数据库添加一些行,但我想在添加行之前进行"自定义检查",以了解是否必须添加,替换或忽略进行的行.我希望尽可能降低客户端和数据库服务器之间的流量,并尽量减少查询次数.
为此,我希望获取验证所需的信息,并且只需要在流程开始时获取一次.
我在考虑做这样的事情,但很明显,它不起作用.有人有想法吗?
Dictionary<int, DateTime> existingItems =
(from ObjType ot in TableObj
select (new KeyValuePair<int, DateTime>(ot.Key, ot.TimeStamp))
)
Run Code Online (Sandbox Code Playgroud)
我最后想要的是一个Dictionary,而不必从TableObject下载整个ObjectType对象.
我还考虑了以下代码,但我试图找到一个正确的方法:
List<int> keys = (from ObjType ot in TableObj orderby ot.Key select ot.Key).ToList<int>();
List<DateTime> values = (from ObjType ot in TableObj orderby ot.Key select ot.Value).ToList<int>();
Dictionary<int, DateTime> existingItems = new Dictionary<int, DateTime>(keys.Count);
for (int i = 0; i < keys.Count; i++)
{
existingItems.Add(keys[i], values[i]);
}
Run Code Online (Sandbox Code Playgroud) 有没有办法比较Linq2Sql中的2个DateTime变量,但忽略了Time部分.
该应用程序将项目存储在数据库中并添加已发布的日期.我想保留确切的时间,但仍然可以按日期本身.
我想比较12/3/89 12:43:34和12/3/89 11:22:12然后忽略实际的时间,所以这两个都被认为是相同的.
我想我可以在比较之前将所有时间设置为00:00:00但我实际上确实想知道一天中的时间我也希望能够仅按日期进行比较.
我找到了一些具有相同问题的代码,他们分别比较了年,月和日.有一个更好的方法吗?
假设我有一个左外连接:
from f in Foo
join b in Bar on f.Foo_Id equals b.Foo_Id into g
from result in g.DefaultIfEmpty()
select new { Foo = f, Bar = result }
Run Code Online (Sandbox Code Playgroud)
如何使用扩展方法表达相同的任务?例如
Foo.GroupJoin(Bar, f => f.Foo_Id, b => b.Foo_Id, (f,b) => ???)
.Select(???)
Run Code Online (Sandbox Code Playgroud) linq-to-sql ×10
c# ×6
.net ×4
linq ×4
sql ×2
ado.net ×1
database ×1
ienumerable ×1
iqueryable ×1
join ×1
lambda ×1
todictionary ×1