标签: linq-to-sql

LINQ跨多个数据库

我有两个表需要通过LINQ加入,但它们存在于不同的数据库中.现在我正在返回一个表的结果,然后循环并检索另一个表的结果,你可以猜测它并不是非常有效.有没有办法让它们成为一个LINQ语句?有没有其他方法来构建它以避免循环?我只是在寻找想法,万一我忽略了什么.

请注意,我无法更改数据库,即我无法在引用另一个的视图中创建视图.我还没有尝试过的东西是在引用两个表的第三个数据库中创建视图.欢迎任何想法.

linq linq-to-sql

36
推荐指数
2
解决办法
2万
查看次数

自动编译Linq查询

我们发现编译Linq查询比每次编译要快得多,所以我们想开始使用编译查询.问题是它使代码更难阅读,因为查询的实际语法在某些其他文件中是关闭的,远离它的使用位置.

在我看来,有可能编写一个方法(或扩展方法),它使用反射来确定传入的查询,并自动缓存已编译的版本以供将来使用.

var foo = (from f in db.Foo where f.ix == bar select f).Cached();
Run Code Online (Sandbox Code Playgroud)

Cached()必须反映传入的查询对象并确定所选的表和查询的参数类型.显然,反射有点慢,因此使用缓存对象的名称可能会更好(但是第一次编译查询时仍然需要使用反射).

var foo = (from f in db.Foo where f.ix == bar select f).Cached("Foo.ix");
Run Code Online (Sandbox Code Playgroud)

有没有人有这方面的经验,或者知道它是否可能?

更新:对于那些没有看过它的人,可以使用以下代码将LINQ查询编译为SQL:

public static class MyCompiledQueries
{
    public static Func<DataContext, int, IQueryable<Foo>> getFoo =
        CompiledQuery.Compile(
            (DataContext db, int ixFoo) => (from f in db.Foo
                                            where f.ix == ixFoo
                                            select f)
        );
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是拥有这些Func<>对象的缓存,我可以在第一次自动编译查询后调用它们.

c# linq asp.net-mvc iqueryable linq-to-sql

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

如何在动态linq查询中使用"包含"或"喜欢"?

CSharpSamples.zip中Dynamic Linq附带的帮助文件未显示使用contains或like的任何示例.

这样做有什么简单的解决方法吗?即哪里(像@col这样的col)不起作用.

.net linq dynamic linq-to-sql

36
推荐指数
2
解决办法
4万
查看次数

LINQ to SQL和有序结果的运行总计

我想在a中显示客户的会计历史记录DataGridView,我希望有一个列显示其余额的运行总计.我这样做的旧方法是获取数据,循环数据,逐行添加行DataGridView并计算当时的运行总数.瘸.我宁愿使用LINQ to SQL,或LINQ如果不能使用LINQ to SQL,来计算运行总数,这样我就可以设置DataGridView.DataSource为我的数据.

这是我正在拍摄的一个超级简化的例子.说我有以下课程.

class Item
{
    public DateTime Date { get; set; }
    public decimal Amount { get; set; }
    public decimal RunningTotal { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想要一个可以生成如下结果的L2S或LINQ语句:

   Date       Amount  RunningTotal
12-01-2009      5          5
12-02-2009     -5          0
12-02-2009     10         10
12-03-2009      5         15
12-04-2009    -15          0
Run Code Online (Sandbox Code Playgroud)

请注意,可能有多个具有相同日期的项目(12-02-2009).在计算运行总计之前,应按日期对结果进行排序.我猜这意味着我需要两个语句,一个用于获取数据并对其进行排序,另一个用于执行运行总计算.

我希望Aggregate能做到这一点,但它并不像我希望的那样有效.或者也许我只是想不出来.

这个问题似乎跟我想要的一样,但我不知道接受/唯一的答案是如何解决我的问题的.

关于如何解决这个问题的任何想法?

编辑 结合Alex和DOK的答案,这就是我最终得到的结果:

decimal runningTotal = 0;
var results = FetchDataFromDatabase()
    .OrderBy(item => item.Date)
    .Select(item => new …
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-objects linq-to-sql

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

使用参数检索LINQ to sql语句(IQueryable)

我试图弄清楚是否有办法检索在数据库服务器上执行的(完整)sql语句.
我已经发现了一些东西,但它并不是我想要的东西:

IQueryable<SomeType> someQuery = ...
string command = dataContext.GetCommand(query).CommandText;
Run Code Online (Sandbox Code Playgroud)

在我的情况下,这给了我一个命令字符串,如:

SELECT TOP (50) [t0].[ID], ....
FROM [dbo].[someTable] AS [t0]
WHERE ([t0].[someColumn] IS NOT NULL) AND (([t0].[someColumn]) IN (@p0))
Run Code Online (Sandbox Code Playgroud)

在数据库上执行:

exec sp_executesql N'SELECT TOP (50) [t0].[ID], ...
FROM [dbo].[someTable] AS [t0]
WHERE ([t0].[someColumn] IS NOT NULL) AND (([t0].[someColumn]) IN (@p0, @p1))',N'@p0  int,@p1 int',@p0=401,@p1=201
Run Code Online (Sandbox Code Playgroud)

有没有办法从C#代码中检索这个"完整"语句(以及参数值)?

c# linq-to-sql

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

LinqDataSource - 你能限制返回的记录数量吗?

我想LinqDataSource在页面上使用控件并限制返回的记录数量.我知道如果我使用代码,我可以做这样的事情:

IEnumerable<int> values = Enumerable.Range(0, 10);
IEnumerable<int> take3 = values.Take(3);
Run Code Online (Sandbox Code Playgroud)

有人知道LinqDataSource控件是否可以这样吗?

[更新]

我将使用LinqDataSourceListView控制,不是一个GridView或Repeater.该LinqDataSource向导不提供限制返回记录数的功能."高级"选项仅允许您启用删除,插入和更新.

c# linq database asp.net linq-to-sql

34
推荐指数
4
解决办法
2万
查看次数

运算符之间的LINQ

以下适用于IEnumerable类型,但有没有办法得到这样的东西使用IQueryable类型对sql数据库?

class Program
{
    static void Main(string[] args)
    {
        var items = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, };

        foreach (var item in items.Where(i => i.Between(2, 6)))
            Console.WriteLine(item);
    }
}

static class Ext
{
   public static bool Between<T>(this T source, T low, T high) where T : IComparable
   {
       return source.CompareTo(low) >= 0 && source.CompareTo(high) <= 0;
   }
}
Run Code Online (Sandbox Code Playgroud)

linq linq-to-sql

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

LINQ to SQL:GroupBy()和Max()获取具有最新日期的对象

考虑一个用于存储审计事件的SQL Server表.

需要的是只获得每个CustID的最新条目.我们想要获得整个对象/行.我假设在查询中需要GroupBy().这是迄今为止的查询:

var custsLastAccess = db.CustAccesses   
                        .Where(c.AccessReason.Length>0)
                        .GroupBy(c => c.CustID)
//                      .Select()
                        .ToList();
// (?) where to put the c.Max(cu=>cu.AccessDate) 
Run Code Online (Sandbox Code Playgroud)

客户布局

问题: 如何创建查询以选择每个的最新(最大AccessDate)记录/对象CustID

c# linq group-by linq-to-sql

34
推荐指数
3
解决办法
3万
查看次数

LINQ to Entities无法识别方法'System.TimeSpan Subtract(System.DateTime)'方法

我尝试在当前日期的60天30天20天内选择数据库中的记录.

请在下面查看此查询.

 var uploads = (
                from files in _fileuploadRepository.Table
                join product in _productRepository.Table on files.Event equals product.Id
                where
                    (
                product.EventDate != null &&
                    (product.EventDate.Subtract(DateTime.Now).Days <= 60 && product.EventDate.Subtract(DateTime.Now).Days >= 60) ||
                    (product.EventDate.Subtract(DateTime.Now).Days <= 30 && product.EventDate.Subtract(DateTime.Now).Days >= 30) ||
                    (product.EventDate.Subtract(DateTime.Now).Days <= 20 && product.EventDate.Subtract(DateTime.Now).Days >= 20))
                    &&
                files.IsSkiped == false
                select files;
            ).ToList();
Run Code Online (Sandbox Code Playgroud)

但是此查询发生错误.

在此输入图像描述

我很无能为力.请帮忙.

c# linq linq-to-entities entity-framework linq-to-sql

34
推荐指数
3
解决办法
3万
查看次数

如何在Linq to SQL中实现缓存?

我们刚刚开始在我们的DAL中使用LINQ to SQL,我们还没有真正提出缓存模型的标准.以前我们使用的是一个基础'DAL'类,它实现了我们所有DAL类继承的缓存管理器属性,但现在我们没有.我想知道是否有人提出了一种缓存LINQ to SQL结果的"标准"方法?

我们正在网络环境(IIS)中工作,如果这有所作为.我知道这可能最终成为一个主观问题,但我仍然认为这些信息很有价值.

编辑:为了澄清,我不是在讨论缓存单个结果,我更多的是一个架构解决方案,就像你如何设置缓存一样,以便所有的链接方法都使用相同的缓存架构.

.net sql iis caching linq-to-sql

33
推荐指数
2
解决办法
2万
查看次数