是的目的AsQueryable()只是让你可以围绕传递IEnumerable到所期望的方法IQueryable,或者是有一个有用的理由表示IEnumerable为IQueryable?例如,它应该是这样的情况:
IEnumerable<Order> orders = orderRepo.GetAll();
// I don't want to create another method that works on IEnumerable,
// so I convert it here.
CountOrders(orders.AsQueryable());
public static int CountOrders(IQueryable<Order> ordersQuery)
{
return ordersQuery.Count();
}
Run Code Online (Sandbox Code Playgroud)
或者它实际上是否使它做了不同的事情:
IEnumerable<Order> orders = orderRepo.GetAll();
IQueryable<Order> ordersQuery = orders.AsQueryable();
IEnumerable<Order> filteredOrders = orders.Where(o => o.CustomerId == 3);
IQueryable<Order> filteredOrdersQuery = ordersQuery.Where(o => o.CustomerId == 3);
// Are these executed in a different way?
int result1 = filteredOrders.Count(); …Run Code Online (Sandbox Code Playgroud) 考虑以下代码:
var query = db.Table
.Where(t => SomeCondition(t))
.AsEnumerable();
int recordCount = query.Count();
int totalSomeNumber = query.Sum();
decimal average = query.Average();
Run Code Online (Sandbox Code Playgroud)
假设query需要很长时间才能运行.我需要获得记录数,总数SomeNumber已经返回,并在结束时取平均值.我以为根据我读的是.AsEnumerable()将执行使用LINQ到SQL,然后使用LINQ到对象的查询Count,Sum以及Average.相反,当我在LINQPad中执行此操作时,我看到相同的查询运行三次.如果我更换.AsEnumerable()用.ToList(),它只被查询一次.
我错过了什么AsEnumerable/做什么?
我正在尝试公开一个只读字典,该字典保存带有只读接口的对象.在内部,字典是可写的,其中的对象也是可写的(参见下面的示例代码).我的问题是,由于此处问题中概述的原因,IReadOnlyDictionary不支持协变转换.这意味着我不能只将我的内部字典公开为只读字典.
所以我的问题是,有没有一种有效的方法将我的内部字典转换为IReadOnlyDictionary,或者其他一些方法来处理它?我能想到的选择是:
1看起来像是一种痛苦,2似乎非常低效.3听起来像目前最有希望,但仍然是丑陋的.我还有其他选择吗?
public class ExposesReadOnly
{
private Dictionary<int, NotReadOnly> InternalDict { get; set; }
public IReadOnlyDictionary<int, IReadOnly> PublicList
{
get
{
// This doesn't work...
return this.InternalDict;
}
}
// This class can be modified internally, but I don't want
// to expose this functionality.
private class NotReadOnly : IReadOnly
{
public string Name { get; set; }
}
}
public interface IReadOnly
{
string Name { get; }
}
Run Code Online (Sandbox Code Playgroud) SQL Management Studio是否有免费或廉价的插件/附件提供智能感知和(不太重要)一些自动格式化?我最近尝试过Redgate的产品,并且非常喜欢这些功能,但我想知道是否有其他选择.
是否有一个查询可以获取针对特定表列的外键?例如,假设我有这三个表:
__________
|Table A |
----------
|Id |
----------
___________
|Table B |
-----------
|Id |
|TableAId | (Foreign Key to TableA.Id)
-----------
___________
|Table C |
-----------
|Id |
|TableAId | (Foreign Key to TableA.Id)
-----------
Run Code Online (Sandbox Code Playgroud)
我需要一个查询"Select*外键指向TableA.Id",返回"表C:TableAId","表B:TableAId".我正在浏览一些INFORMATION_SCHEMA系统视图,看起来我可以很容易地看到外键分别属于表A或表B,但我找不到它所说的"表C有一个外键到表A"具体而言.我可以弄清楚查询的细节,我只是找不到我正在寻找的视图(或者我正在掩饰它们).任何帮助,将不胜感激.
我有一个我们称之为的元素selectedTable包含innerHtml:
<TBODY>
<TR>
<TD></TD>
<TD></TD>
<TD class='ms-cal-nav-buttonsltr'></TD>
</TR>
</TBODY>
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用JQuery选择器返回<TD>带有"ms-cal-nav-buttonsltr"类的标记.我发现$(selectedTable).find("TD")按预期返回表中的所有TD标签,但我想知道如何将TD元素选择器与类选择器结合起来.我试着$(subnode).find("TD").find(".ms-cal-nav-buttonsltr")和$(subnode).find("TD .ms-cal-nav-buttonsltr")无济于事的,但这些在黑暗中拍摄只.实现这一目标的最有效方法是什么?提前致谢.
这是一个普遍的问题,但这是我正在寻找解决方案的具体案例:
我有一个Dictionary<int, List<string>>我想应用各种谓词.我想要一个可以处理多个LINQ查询的方法,例如:
from x in Dictionary
where x.Value.Contains("Test")
select x.Key
from x in Dictionary
where x.Value.Contains("Test2")
select x.Key
Run Code Online (Sandbox Code Playgroud)
所以我正在寻找一个像这样的方法:
public int GetResult(**WhatGoesHere** filter)
{
return from x in Dictionary.Where(filter)
select x.Key;
}
Run Code Online (Sandbox Code Playgroud)
要像这样使用:
int result;
result = GetResult(x => x.Value.Contains("Test"));
result = GetResult(x => x.Value.Contains("Test2"));
Run Code Online (Sandbox Code Playgroud)
WhatGoesHere的正确语法是什么?
在我的Actionscript代码中,我有两个日期:
var date1:Date = new Date(2011,1,1);
var date2:Date = new Date(2011,1,1);
Run Code Online (Sandbox Code Playgroud)
这不起作用:
var equal:Boolean = date1 == date2;
Run Code Online (Sandbox Code Playgroud)
从阅读中我发现这是一个可行的替代方案,因为它只是从标准时间点获得毫秒数.
var equal:Boolean = date1.getTime() == date2.getTime();
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
提前致谢.
Edit - Cleaning up question to better reflect the actual issue:
我正在使用SQLMetal从我们的SQL Server数据库生成数据库类.最近,我需要添加一个表,其中有多个外键指向同一个表.使用LINQPad来使用新表,我能够访问两个外键的属性,如下所示:
......这就是我期待它的方式.问题是,SQLMetal生成的类产生以下属性:
现在我可以只生成生成的类,因此FKBTableNameGoesHere将是FK_B,但生成的文件经常被不同的团队成员更改,因此这将是一个巨大的痛苦.这有一个简单的解决方案吗?
提前致谢.
编辑2 所以,我认为解决方案是创建一个具有名为我想要的属性的部分类,并让getter/setter指向命名不佳的属性.这有助于选择,但不能在where子句中使用它.任何人都有解决方案?
不幸的是,在Actionscript中,似乎对Vector类的支持尚不完全.在某些情况下,我需要将Vector转换为数组(例如,创建一个ArrayCollection).我认为这样可以解决问题:
var myVector:Vector.<MyType> = new Vector.<MyType>();
var newArray:Array = new Array(myVector);
Run Code Online (Sandbox Code Playgroud)
显然,这只是创建一个数组,其中数组的第一个索引包含完整的Vector对象.这是我唯一的选择:
var newArray:Array = new Array(myVector);
for each(var item:MyType in myVector)
{
newArray.push(item);
}
Run Code Online (Sandbox Code Playgroud)
我觉得这会使代码混乱很多,我需要在很多地方做到这一点.Vector类没有实现任何类型的接口,所以据我所知,我不能创建一个通用函数来转换为数组.有没有办法这样做,而不是每次我想将Vector转换为数组时都添加这个混乱?
.net ×4
c# ×4
linq ×3
actionscript ×2
linq-to-sql ×2
sql ×2
.net-4.0 ×1
add-on ×1
apache-flex ×1
arrays ×1
constraints ×1
covariance ×1
date ×1
dictionary ×1
equality ×1
foreign-keys ×1
ienumerable ×1
intellisense ×1
iqueryable ×1
javascript ×1
jquery ×1
operators ×1
plugins ×1
predicate ×1
readonly ×1
sqlmetal ×1
ssms ×1
vector ×1