我遇到了LINQ to SQL的一些特性.
使用相对简单的查询,我想选择一些字段,但将日期字段格式化为字符串,我首先这样做:
var list = dataContext.MyLists.Single(x => x.ID == myId);
var items = from i in list.MyItems
select
new
{
i.ID,
i.Sector,
i.Description,
CompleteDate = i.CompleteDate.HasValue ? i.CompleteDate.Value.ToShortDateString() : "",
DueDate = i.DueDate.HasValue ? i.DueDate.Value.ToShortDateString() : ""
};
Run Code Online (Sandbox Code Playgroud)
后来我尝试了以下查询,这是完全相同的,除了我直接从我的dataContext查询,而不是我的第一个查询中的一个元素:
var items = from i in dataContext.MyLists
select
new
{
i.ID,
i.Sector,
i.Description,
CompleteDate = i.CompleteDate.HasValue ? i.CompleteDate.Value.ToShortDateString() : "",
DueDate = i.DueDate.HasValue ? i.DueDate.Value.ToShortDateString() : ""
};
Run Code Online (Sandbox Code Playgroud)
第一个运行正常,但第二个查询产生一个:
无法将表达式"..."转换为SQL,并且无法将其视为本地表达式.
如果我删除格式化日期的行,它工作正常.如果我删除.HasValue检查它也可以正常工作,直到有空值.
有任何想法吗?
安东尼
在这个答案的推动下,我想知道如果一个人使用了很多东西,幕后会发生什么FileStream.Seek(-1).
为清楚起见,我将重新发布答案:
using (var fs = File.OpenRead(filePath))
{
fs.Seek(0, SeekOrigin.End);
int newLines = 0;
while (newLines < 3)
{
fs.Seek(-1, SeekOrigin.Current);
newLines += fs.ReadByte() == 13 ? 1 : 0; // look for \r
fs.Seek(-1, SeekOrigin.Current);
}
byte[] data = new byte[fs.Length - fs.Position];
fs.Read(data, 0, data.Length);
}
Run Code Online (Sandbox Code Playgroud)
就个人而言,我会将2048个字节读入缓冲区并在该缓冲区中搜索char.
使用Reflector我发现该方法在内部使用SetFilePointer.
有没有关于Windows缓存和向后读取文件的文档?Windows是否"向后"缓冲并在使用连续时查询缓冲区Seek(-1)还是从当前位置开始提前读取?
有趣的是,一方面大多数人都同意Windows进行良好的缓存,但另一方面,"向后读取文件"的每个答案都涉及读取字节块并对该块进行操作.
可以说我有这个界面和类:
interface IListener
{
void f();
void g();
void h();
}
class Adapter implements IListener
{
void f() {}
void g() {}
void h() {}
}
Run Code Online (Sandbox Code Playgroud)
如果它们什么也不做,那么实现thoose接口方法有什么意义呢?
问题来自设计模式Java工作簿.
我们使用由我们最大的客户编写的程序来接收订单,预订运输和其他与订单相关的东西.我们没有其他机会,只能使用该程序,并且当涉及到他们的程序问题时,客户是非常不支持的.我们只需要接受该计划.
现在这个程序在与两个或更多用户一起使用时大部分时间都非常慢,所以我试着看看窗帘后面找到问题的根源.
我还使用Process Monitor监视文件访问,并找出程序速度如此之慢的原因:它在mdb文件上进行了数千次读取操作,即使程序空闲也是如此.通过网络,这当然非常缓慢:
Process Monitor Trace http://img217.imageshack.us/img217/1456/screenshothw5.png
有没有办法监视负责读取活动的查询?我可以设置跟踪标志吗?挂钩JET DLL的?我想这个程序正在做一些昂贵的查询,导致JET在这个过程中读取大量数据.
PS:我已经尝试将mdb放在我们公司的文件服务器上,成功访问它甚至比本地共享更慢.我也尝试在客户端上更改锁定机制(机会锁定)但没有成功.
我想知道发生了什么,需要一些有关我们客户开发人员的事实和建议,以帮助他/她更快地完成程序.
为什么
List<long> numbers = Enumerable.Range(1, 9999).Cast<long>().ToList();
Run Code Online (Sandbox Code Playgroud)
失败并出现InvalidCastException?
我目前正在思考一些我无法做对的想法.
问题是我想使用一个lambda函数来实例化捕获的变量,并使用另一个lambda来访问该变量的属性.
由于实例化发生在lambda中,变量实际上并没有在我想要在第二个lambda中使用它时实例化.这是一种鸡和蛋的问题.
我知道变量将在第二个lambda中使用时被实例化,但编译器却没有.
我的想法有什么办法可行吗?这是实际的代码:
class Program
{
static void Main(string[] args)
{
SqlCommand cmd;
using (new DisposableComposite(
() => cmd = new SqlCommand(),
() => cmd.Connection)) // <- compiler error - variable not instantiated
{
// code
}
}
}
class DisposableComposite : IDisposable
{
private List<IDisposable> _disposables = new List<IDisposable>();
public DisposableComposite(params Func<IDisposable>[] disposableFuncs)
{
// ensure the code is actually executed
foreach (var func in disposableFuncs)
{
IDisposable obj = func.Invoke();
_disposables.Add(obj);
} …Run Code Online (Sandbox Code Playgroud) 我想获得满足给定条件的第一个项目,如果没有一个项目符合该条件,我只想获得第一个项目
这就是我目前所做的和有效的,但我不喜欢它。在一个 LINQ 查询中是否有更优雅的方法来做同样的事情?
LookupLine lookup;
Func<KeyValuePair<int,LookupLine>,bool> criteria =
(kv) => !kv.Value.Gruppe.StartsWith("SF");
if (lookupLines.Any(criteria))
{
lookup = lookupLines.First(criteria).Value;
}
else if (lookupLines.Any())
{
lookup = lookupLines.First().Value;
}
FirstRelevantGroup = lookup.Gruppe;
Run Code Online (Sandbox Code Playgroud) 我有一个代码,从C#中的随机类生成随机字符串和数字.然后将其写入文本文件.我怎样才能提高性能?代码如下:
int i = 0;
Record[] rec = new Record[100000];
Class1 cl = new Class1();
Random random = new Random();
while (i < 100000)
{
rec[i].num1 = random.Next();
rec[i].num2 = random.Next();
rec[i].mult = rec[i].num1 * rec[i].num2;
rec[i].rel = true;
rec[i].name = cl.generateRandomString(1);
rec[i].var_set = cl.generateRandomString(2);
using (StreamWriter writer = new StreamWriter("important.txt", true))
{
writer.Write(rec[i].name);
writer.Write(" ");
writer.Write(rec[i].var_set);
writer.Write(" ");
writer.Write(rec[i].num1);
writer.Write(" ");
writer.Write(rec[i].num2);
writer.Write(" ");
writer.Write(rec[i].mult);
writer.Write(" ");
writer.WriteLine(rec[i].rel);
}
i++;
Run Code Online (Sandbox Code Playgroud) 我有一个用户定义的类
public class Student
{
int rollno;
public getrollno()
{
return rollno;
}
}
Run Code Online (Sandbox Code Playgroud)
我想要有扩展方法checkifRollnoIs1(),它将返回true或false.
我能做到吗?我该怎么办?