什么是使用IQueryable在LINQ的背景下?
它是用于开发扩展方法还是任何其他目的?
我以为我知道一切,IEnumerable<T>但我刚遇到一个我无法解释的案例.当我们调用.在一个linq方法上IEnumerable,执行被推迟到对象被枚举,不是吗?
那么如何解释下面的示例:
public class CTest
{
public CTest(int amount)
{
Amount = amount;
}
public int Amount { get; set; }
public override string ToString()
{
return $"Amount:{Amount}";
}
public static IEnumerable<CTest> GenerateEnumerableTest()
{
var tab = new List<int> { 2, 5, 10, 12 };
return tab.Select(t => new CTest(t));
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止没什么不好的!但是下面的测试给了我一个意想不到的结果,虽然我的知识IEnumerable<T>和.Wherelinq方法:
[TestMethod]
public void TestCSharp()
{
var tab = CTest.GenerateEnumerableTest();
foreach (var item in tab.Where(i => i.Amount > 6))
{ …Run Code Online (Sandbox Code Playgroud) 我是 EF 的新手,我曾经使用过数据集、表适配器和存储过程。我刚刚发现了 EF 的简单性,并且发现 EF 方法对我的开发有很大帮助。我有几个问题,我试图寻找他们的答案,但徒劳无功。由于我总是与拥有大桌子的客户合作,因此我进行此调用的事实例如:
_ordersContext.Services.ToList()
Run Code Online (Sandbox Code Playgroud)
这是否意味着整个服务表被加载到内存中?如果答案是肯定的(顺便说一下,我认为答案是肯定的),我们可以通过使用 linq 函数来避免内存成本吗?例如 Take() 方法?(我的意思是如果你只想有 10 条记录,而不需要在内存中加载整个表)。关于其他 linq 函数的相同问题,如 where、first、firstordefault、count 等......我的意思是,我们是否必须加载整个表?是否有一个很好的文档来讨论如何在最佳实践和内存使用方面使用 EF。
我正在使用LINQ to Entities从数据库中获取一些数据。以下是我的查询。
var location = from l in dbContext.Locations
join e in dbContext.Equipment on l.ID equals e.LocationID into rs1
from e in rs1.DefaultIfEmpty()
where ids.Contains(l.ID)
select new
{
EquipmentClass = e,
LocationID = l.ID,
LocationName = l.Name,
EquipmentName = e == null ? null : e.Name,
Description = e == null ? null : e.Description,
InServiceStatus = e == null ? false : e.InServiceStatus,
EquipmentType = e.EquipmentType.Name
};
foreach (var item in location)
{
// some logic
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中, …
关于DEFERRED EXECUTION,以下评论是否正确?
1. var x = dc.myTables.Select(r=>r);//yes
2. var x = dc.myTables.Where(..).Select(r=>new {..});//yes
3. var x = dc.myTables.Where(..).Select(r=>new MyCustomClass {..});//no
Run Code Online (Sandbox Code Playgroud)
换句话说,我一直认为投射自定义类对象总是会导致急切的执行.但是我找不到支持/否认它的引用(虽然我看到的结果与它相矛盾,因此帖子)
我有以下代码:
List<int> no = new List<int>() { 1, 2, 3, 4, 5 };
var res2 = no.Sum(a => a * a);
Console.WriteLine(res2);
no.Add(100);
Console.WriteLine(res2);
Run Code Online (Sandbox Code Playgroud)
我期待以下结果:
55
10055
但都是55岁
55
55
我在这里看到的是关于延期评估,但没有帮助.Sum是一种扩展方法,但结果不是我提到的.为什么?
我有这个代码Linq c#
from r in Employer.Restrictions
select new RestrictionDto(r);
Run Code Online (Sandbox Code Playgroud)
雇主限制在注册,但RestrictionDto的构造函数从未被调用,只返回null.我在restrictionDto中放了一个breakPoint,代码永远不会停止.
我以前从未见过这个问题.我在代码中有很多这样的代码并且工作正常.
有人可以帮忙吗?