Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将多个linq查询和连接的结果组合成一个较小的查询_C#_Linq_Linq To Dataset - Fatal编程技术网

C# 将多个linq查询和连接的结果组合成一个较小的查询

C# 将多个linq查询和连接的结果组合成一个较小的查询,c#,linq,linq-to-dataset,C#,Linq,Linq To Dataset,我是否可以将以下内容重新构造为更紧凑的linq查询,理想情况下不需要引入辅助函数 var revPerUnitChanges = from row in this.DataTable.GetChanges(DataRowState.Modified).AsEnumerable() let field = "Rev/Unit" select new { Field = field, From = row.Field<decimal&g

我是否可以将以下内容重新构造为更紧凑的linq查询,理想情况下不需要引入辅助函数

var revPerUnitChanges = 
    from row in this.DataTable.GetChanges(DataRowState.Modified).AsEnumerable()
    let field = "Rev/Unit"
    select new {
        Field = field,
        From = row.Field<decimal>(field, DataRowVersion.Original),
        To = row.Field<decimal>(field, DataRowVersion.Current),
        ItemIds = row.Field<string>("ItemIds"),};
var costPerUnitChanges = 
    from row in this.DataTable.GetChanges(DataRowState.Modified).AsEnumerable()
    let field = "Cost/Unit"
    select new {
        Field = field,
        From = row.Field<decimal>(field, DataRowVersion.Original),
        To = row.Field<decimal>(field, DataRowVersion.Current),
        ItemIds = row.Field<string>("ItemIds"), };
var numUnitsChanges = 
    from row in this.DataTable.GetChanges(DataRowState.Modified).AsEnumerable()
    let field = "Units"
    select new {
        Field = field,
        From = row.Field<decimal>(field, DataRowVersion.Original),
        To = row.Field<decimal>(field, DataRowVersion.Current),
        ItemIds = row.Field<string>("ItemIds"), };
var changes = 
    revPerUnitChanges
        .Concat(costPerUnitChanges
        .Concat(numUnitsChanges))
        .Where(c => c.From != c.To);
var revPerUnitChanges=
来自this.DataTable.GetChanges(DataRowState.Modified).AsEnumerable()中的行
let field=“Rev/Unit”
选择新的{
字段=字段,
From=行.字段(字段,DataRowVersion.Original),
To=行.字段(字段,DataRowVersion.Current),
ItemIds=row.Field(“ItemIds”),};
var costPerUnitChanges=
来自this.DataTable.GetChanges(DataRowState.Modified).AsEnumerable()中的行
let field=“成本/单位”
选择新的{
字段=字段,
From=行.字段(字段,DataRowVersion.Original),
To=行.字段(字段,DataRowVersion.Current),
ItemIds=row.Field(“ItemIds”),};
变量numUnitsChanges=
来自this.DataTable.GetChanges(DataRowState.Modified).AsEnumerable()中的行
让field=“单位”
选择新的{
字段=字段,
From=行.字段(字段,DataRowVersion.Original),
To=行.字段(字段,DataRowVersion.Current),
ItemIds=row.Field(“ItemIds”),};
风险值变化=
重新审视变化
.Concat(成本变化)
.Concat(Numunitchanges))
.式中(c=>c.From!=c.To);

首先创建一个helper类来保存数据。(您的代码使用匿名类型不会有任何问题,但如果您想将节重构为方法,使用命名类会容易得多。)


我只是想说声谢谢-我一字不差地使用了你的代码,这是一种改进,它添加到了我的工具箱中,使事情得以完成。。。
public class MyClass //TODO give better name
{
    public MyClass(DataRow row, string field) //You could have a public static generate method if it doesn't make sense for this to be a constructor.
    {
        Field = field;
        From = row.Field<decimal>(field, DataRowVersion.Original);
        To = row.Field<decimal>(field, DataRowVersion.Current);
        ItemIds = row.Field<string>("ItemIds");
    }
    public string Field { get; set; }
    public decimal From { get; set; }
    public decimal To { get; set; }
    public string ItemIds { get; set; }
}
var changes = dataTable.GetChanges(DataRowState.Modified)
    .AsEnumerable()
    .Select(row => new[]{ //create 3 new items for each row
                    new MyClass(row, "Rev/Unit"),
                    new MyClass(row, "Cost/Unit"),
                    new MyClass(row, "Units"),
                })
    .SelectMany(item => item) //flatten the inner array
    .Where(item => item.From != item.To);