小编VVS*_*VVS的帖子

LINQ to SQL的特点

我遇到了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检查它也可以正常工作,直到有空值.

有任何想法吗?

安东尼

c# linq linq-to-sql

5
推荐指数
3
解决办法
4763
查看次数

FileStream.Seek与缓冲读取

这个答案的推动下,我想知道如果一个人使用了很多东西,幕后会发生什么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进行良好的缓存,但另一方面,"向后读取文件"的每个答案都涉及读取字节块并对该块进行操作.

c# file-io

5
推荐指数
1
解决办法
2921
查看次数

实现什么都不做的接口方法

可以说我有这个界面和类:

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工作簿.

java design-patterns adapter

4
推荐指数
1
解决办法
1327
查看次数

Microsoft JET SQL查询日志记录或"如何调试客户的程序?"

问题:

我们使用由我们最大的客户编写的程序来接收订单,预订运输和其他与订单相关的东西.我们没有其他机会,只能使用该程序,并且当涉及到他们的程序问题时,客户是非常不支持的.我们只需要接受该计划.

现在这个程序在与两个或更多用户一起使用时大部分时间都非常慢,所以我试着看看窗帘后面找到问题的根源.

关于我到目前为止发现的程序的一些观点:

  • 它是用VB 6.0编写的
  • 它使用受密码保护的Access-DB(Access 2000 MDB),该文件位于一个用户计算机上的文件夹中.
  • 该文件夹通过网络共享,并由所有其他用户使用.
  • 它使用msjet40.dll版本4.00.9704与访问进行通信.我想这是ADO?

我还使用Process Monitor监视文件访问,并找出程序速度如此之慢的原因:它在mdb文件上进行了数千次读取操作,即使程序空闲也是如此.通过网络,这当然非常缓慢:

Process Monitor Trace http://img217.imageshack.us/img217/1456/screenshothw5.png

真正的问题:

有没有办法监视负责读取活动的查询?我可以设置跟踪标志吗?挂钩JET DLL的?我想这个程序正在做一些昂贵的查询,导致JET在这个过程中读取大量数据.

PS:我已经尝试将mdb放在我们公司的文件服务器上,成功访问它甚至比本地共享更慢.我也尝试在客户端上更改锁定机制(机会锁定)但没有成功.

我想知道发生了什么,需要一些有关我们客户开发人员的事实和建议,以帮助他/她更快地完成程序.

vb6 debugging ms-access trace jet

3
推荐指数
1
解决办法
3578
查看次数

将IEnumerable <int>转换为IEnumerable <long>失败

可能重复:
令人困惑的Enumerable.Cast InvalidCastException

为什么

List<long> numbers = Enumerable.Range(1, 9999).Cast<long>().ToList();
Run Code Online (Sandbox Code Playgroud)

失败并出现InvalidCastException?

c# extension-methods casting

2
推荐指数
1
解决办法
3486
查看次数

捕获变量实例化问题

我目前正在思考一些我无法做对的想法.

问题是我想使用一个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)

c# lambda captured-variable

1
推荐指数
1
解决办法
374
查看次数

获取符合条件的第一项或返回第一项

我想获得满足给定条件的第一个项目,如果没有一个项目符合该条件,我只想获得第一个项目

这就是我目前所做的和有效的,但我不喜欢它。在一个 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# linq-to-objects

1
推荐指数
1
解决办法
2660
查看次数

如果它包含100000行数据,如何在C#中编写超快的ascii文件?

我有一个代码,从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)

c#

1
推荐指数
1
解决办法
6000
查看次数

C#,可以将扩展方法添加到C#中的用户定义类(不是基类)

我有一个用户定义的类

public class Student
{
    int rollno;
    public getrollno()
    {
        return rollno;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要有扩展方法checkifRollnoIs1(),它将返回true或false.

我能做到吗?我该怎么办?

c# c#-3.0

0
推荐指数
1
解决办法
394
查看次数