标签: linq-to-dataset

是否值得在ASP.NET中使用PLINQ?

有没有人有使用PLINQ和ASP.NET的经验?这是一个很好的组合,还是在大多数情况下要避免的事情?

我为一个lawfirm(约100个用户)开发了一个Intranet ASP.NET站点.有几个页面包含非平凡的LINQ代码,例如,我们有一个银行rec页面,它使用LINQ to Datasets比较我们的会计数据库和银行数据之间的数千个金融交易.这很慢,所以我很想尝试PLINQ,但我担心这会导致1个请求垄断Web服务器.使银行rec运行速度提高4倍,但在运行时关闭所有其他用户并不会有所改善.

我知道有比LINQ更快的解决方案,但我宁愿用短代码来维护.

现在,我们有一台Dual Pentium 4网络服务器,但我希望我们能在不久的将来升级到不错的硬件.

linq asp.net linq-to-dataset

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

将图像存储在SQL Server CE数据库中

有没有人知道如何在SQL Server CE数据库中存储图像?

该列应该是什么数据类型?(我猜二进制.)

我使用Linq-To-Datasets.有可能使用它将图像放入数据库并在以后再次将其拉出来吗?

谢谢你的建议.


我是这样做的:

MemoryStream stream = new MemoryStream();
myBitmapImage.Save(stream, ImageFormat.Png);
myInsertLinqToDataSetRow.IMAGE_COLUMN = stream.ToArray();
Run Code Online (Sandbox Code Playgroud)

要重新加载它我做了这个:

MemoryStream stream = new MemoryStream(myLinqToDataSetRow.IMAGE_COLUMN);
myBitmapImage.SignatureImage = new Bitmap(stream);
Run Code Online (Sandbox Code Playgroud)

我在MSDN上找到一个页面,表示Image列类型正在消失,你应该使用varbinary(MAX).SQL Server CE不支持Max,所以我做了varbinary(8000).

稍后注意:虽然SQL Server CE不支持varbinary(max).Varbinary(8000)对于许多图像来说都不够大.我确实最终使用了Image类型,即使它计划被弃用.一旦ms在移动平台上提供合理的交替,我将考虑切换.

c# compact-framework windows-mobile linq-to-dataset sql-server-ce

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

如何使用Field <T>和Type?

我有一个方法,确定一个列的最小和最大DataTable:

public void GetMinMaxRange( DataTable data, string valueColumnName )
{
   var min = data.AsEnumerable().Min(m => m.Field<double>(valueColumnName));
   var max = data.AsEnumerable().Max(m => m.Field<double>(valueColumnName));
}
Run Code Online (Sandbox Code Playgroud)

我想重构这个:

public void GetMinMaxRange( DataTable data, string valueColumnName )
{
   DataColumn column = data.Columns[valueColumnName];
   var min = data.AsEnumerable().Min(m => m.Field<column.DataType>(valueColumnName));
   var max = data.AsEnumerable().Max(m => m.Field<column.DataType>(valueColumnName));
}
Run Code Online (Sandbox Code Playgroud)

我需要确定数据类型并使用它而不是硬编码m.Field<double>.这该怎么做?

更新 至于我为什么要计算最小值和最大值之间的差异

    public static double/decimal/int GetMinMaxRange<T>(DataTable data, 
          string valueColumnName) where T : IComparable<T>
    {
        DataColumn column = data.Columns[valueColumnName];
        var min = data.AsEnumerable().Min(m => …
Run Code Online (Sandbox Code Playgroud)

c# generics linq-to-dataset

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

加入LINQ,避免在"new {}"中明确命名属性?

我想做这样的事情:

    DataTable q = from c in customers
            join o in orders on c.Key equals o.Key
            into outer
            from j in outer.DefaultIfEmpty()
            select new { c.*, j.* };
Run Code Online (Sandbox Code Playgroud)

我目前最接近的是以下内容:

    var q = from c in customers
            join o in orders on c.Key equals o.Key
            into outer
            from j in outer.DefaultIfEmpty()
            select new { c, j };
Run Code Online (Sandbox Code Playgroud)

我希望我的结果(q)包含c和j中的所有列.c和j都包含很多列,所以我宁愿不列出它们:

            select new { c.col1, c.col2, etc. }
Run Code Online (Sandbox Code Playgroud)

但我基本上希望最终的DataTable由c.*和j.*组成.

如果我在'select new'中指定所有c和j列,那么这个答案(不是接受的答案,而是它下面的答案)是有效的: 如何将LINQ结果转换为DATATABLE? 但我想避免列出所有内容.

linq linq-to-dataset

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

像Linq到DataTable中的运算符一样?

我正在使用Linq到DataTable.如何在where子句中应用like运算符.我想像数据中的运算符一样搜索数据.

我搜索并尝试了以下代码,但得到了一个错误:方法'Boolean Like(System.String,System.String)'不能在客户端上使用; 它仅用于转换为SQL.

var details = from addresses in dt.AsEnumerable() 
    where SqlMethods.Like(prefixText, prefixText + "%") || SqlMethods.Like(prefixText, "%" + prefixText + "%")
    select (string) addresses["Details"];                      

return details.ToArray();
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-dataset

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

如何使用linq树表达式创建具有动态列的数据透视表

我正在写一个asp.net C#Web应用程序; 我有一个名为' table1'有三列' country',' productId'和' productQuantity' 的内存数据表; 我想转动该表以获得一个新表(假设' table2')将第一列' country'作为固定列,动态数字和列' product_1',' product_2',...,' product_n'的名称根据' table1'中存在的产品总数; 第一列' country'必须包含国家/地区名称; 动态生成的列' product_1',' product_2',...,' product_n'必须包含productQuantity已为指定国家/地区的每个特定产品选择的列

我正在使用Linq查询表达式来编写代码; 问题是我不能硬编码名称和产品的价值; 我无法预测数据表中存在多少产品; 现在,我正在使用以下表达式测试结果:

var query = table1.AsEnumerable()
                .GroupBy(c => c.country)
                .Select(g => new
                {
                    country = g.Key,
                    product_1 = g.Where(c => c.productId == "a30-m").Select(c => c.productQuantity).FirstOrDefault(),
                    product_2 = g.Where(c => c.productId == "q29-s").Select(c => c.productQuantity).FirstOrDefault(),
          .
          .
          .
                    product_n = g.Where(c …
Run Code Online (Sandbox Code Playgroud)

c# linq asp.net linq-to-dataset over-clause

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

可空列上的 LINQ-Join 表

如何在可空列上加入表?

我有以下 LINQ 查询,RMA.fiCharge可以为 NULL:

Dim query = From charge In Services.dsERP.ERP_Charge _
                     Join rma In Services.dsRMA.RMA _
                     On charge.idCharge Equals rma.fiCharge _
                     Where rma.IMEI = imei
               Select charge.idCharge
Run Code Online (Sandbox Code Playgroud)

我在以下位置收到“从'DBNull'类型转换为'Integer'类型无效” query.ToArray()

Dim filter = _
       String.Format(Services.dsERP.ERP_Charge.idChargeColumn.ColumnName & " IN({0})", String.Join(",", query.ToArray))
Run Code Online (Sandbox Code Playgroud)

所以我可以WHERE RMA.fiCharge IS NOT NULL在查询中附加一个。但是如何在 LINQ 中做到这一点,或者还有其他选择吗?

先感谢您。


解决方案:

问题是 DataSet 不支持 Nullable-Types,但如果您在整数列上查询任何 NULL 值,则会生成 InvalidCastException(感谢 Martinho)。来自 dahlbyk 的修改后的 LINQ 查询只需稍加修改即可工作。DataSet 为每个具有 AllowDbNull=True 的列生成一个布尔属性,在本例中为IsfiChargeNull

Dim query = From charge In Services.dsERP.ERP_Charge _ …
Run Code Online (Sandbox Code Playgroud)

.net linq vb.net linq-to-dataset

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

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

使用LINQ获取两列的重复项

LINQ让我疯狂.为什么以下查询不返回重复项,而它只使用一个标识符?我的错误在哪里?

' generate some test-data '
Dim source As New DataTable
source.Columns.Add(New DataColumn("RowNumber", GetType(Int32)))
source.Columns.Add(New DataColumn("Value1", GetType(Int32)))
source.Columns.Add(New DataColumn("Value2", GetType(Int32)))
source.Columns.Add(New DataColumn("Text", GetType(String)))
Dim rnd As New Random()
For i As Int32 = 1 To 100
    Dim newRow = source.NewRow
    Dim value = rnd.Next(1, 20)
    newRow("RowNumber") = i
    newRow("Value1") = value
    newRow("Value2") = (value + 1)
    newRow("Text") = String.Format("RowNumber{0}-Text", i)
    source.Rows.Add(newRow)
Next
' following query does not work, it always has Count=0 '
' although it works with only one …
Run Code Online (Sandbox Code Playgroud)

.net linq vb.net linq-to-objects linq-to-dataset

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

LINQ to DataTable Join Query中的多个on子句

所以我有两个具有相同模式但数据不同的DataTable.我想将两个表连接在一起,其中两个字段,id3和print相同.我如何在LINQ中写这个?

现在,这工作并没有给出编译器错误:

var singOneJoin =
    from prod in singOneProd.Table.AsEnumerable()
    join agg in singOneAgg.Table.AsEnumerable()
    on prod.Field<string>("print") equals agg.Field<string>("print")
    select new
    {
        print = prod.Field<string>("print")
    };
Run Code Online (Sandbox Code Playgroud)

但我真正想要的是:

var singOneJoin =
    from prod in singOneProd.Table.AsEnumerable()
    join agg in singOneAgg.Table.AsEnumerable()
    on (prod.Field<string>("print") equals agg.Field<string>("print") &&
        prod.Field<Int32>("id3") equals agg.Field<Int32><("id3"))
    select new
    {
        print = prod.Field<string>("print")
    };
Run Code Online (Sandbox Code Playgroud)

但这给了我编译错误.

如何在print和id3列上将这两个表连接在一起?

问候,

凯尔

c# linq datatable join linq-to-dataset

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