Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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_List_.net 3.5_Casting - Fatal编程技术网

C# 使用LINQ将列表转换为列表

C# 使用LINQ将列表转换为列表,c#,linq,list,.net-3.5,casting,C#,Linq,List,.net 3.5,Casting,我有两个类,它们有一些相同的属性。 我将第一类的属性储存到一个列表中,然后,我想获取一些需要的属性,并将它们放入第二类类型的列表中。 我已经通过C制作了播放序列,运行正常,但我必须使用LINQ。我试着做点什么,但没有好结果。请帮我提些建议 头等舱: public class ServiceInfo { private long _id; public long ID { get { return this._id; } set { _id =

我有两个类,它们有一些相同的属性。 我将第一类的属性储存到一个列表中,然后,我想获取一些需要的属性,并将它们放入第二类类型的列表中。 我已经通过C制作了播放序列,运行正常,但我必须使用LINQ。我试着做点什么,但没有好结果。请帮我提些建议

头等舱:

   public class ServiceInfo {
    private long _id;
    public long ID {
        get { return this._id; }
        set { _id = value; }
    }

    private string _name;
    public string Name {
        get { return this._name; }
        set { _name = value; }
    }

    private long _qty;
    public long Quantity {
        get { return this._qty; }
        set { _qty = value; }
    }

    private double _amount;
    public double Amount {
        get { return this._amount; }
        set { _amount = value; }
    }

    private string _currency;
    public string Currency {
        get { return this._currency; }
        set { _currency = value; }
    }

    private DateTime? _date;
    public DateTime? Date {
        get { return this._date; }
        set { _date = value; }
    }
}
二等舱:

class InvoiceWithEntryInfo {
    private string currencyField;

    private long IdField;
    public long IdIWEI {
        get { return this.IdField; }
        set { IdIWEI = value; }
    }

    private string nameField;
    public string NameIWEI {
        get { return this.nameField; }
        set { NameIWEI = value; }
    }

    private long qtyField;
    public long QuantityIWEI {
        get { return this.qtyField; }
        set { QuantityIWEI = value; }
    }

    private double amountField;
    public double AmountIWEI {
        get { return this.amountField; }
        set { AmountIWEI = value; }
    }
    
    private DateTime dateField;
    public DateTime? DateIWEI {
        get { return this.dateField; }
        set { DateIWEI = value; }
    }

    public string OwnerIWEI {
        get; set;
    }
}
C运行正常的示例:

运行不正常的LINQ示例:

iweilCOPY = sil.ConvertAll<InvoiceWithEntryInfo>(a => (InvoiceWithEntryInfo)a);

iweilCOPY = sil.FindAll(a => (sil is InvoiceWithEntryInfo)).ConvertAll<InvoiceWithEntryInfo>(a => (InvoiceWithEntryInfo)a);
只需使用选择:

if(sil != null)
{
   var iweil = sil.Select(item=>new InvoiceWithEntryInfo()
            {
                IdIWEI = item.ID,
                AmountIWEI = item.Amount,
                DateIWEI = item.Date
            }).ToList();
}

您需要一个函数来将T实例转换为U实例:

ResultType ConvertMethod(StartType input)
你需要写这个。然后

outputList = inputList.Select(ConvertMethod).ToList();

将其应用于整个输入集合。转换函数可以是lambda内联编写的,但不需要是。如果该函数具有正确的签名,如ConvertMethod,则编译器将正确地将其转换为pass to Select。

常规C代码和LINQ不等效。在常规C中,实例化另一个类的新实例并初始化属性,而您尝试从一个转换到另一个;但是,由于它们不在同一个类层次结构中,因此不能强制转换,而且还没有定义转换运算符,因此也不能使用强制转换语法进行转换

您必须定义一个转换运算符

public static explicit operator InvoiceWithEntryInfo(ServiceInfo item){
     return new InvoiceWithEntryInfo {
             IdIWEI = item.ID,
             AmountIWEI = item.Amount,
             DateIWEI = item.Date};
 }

或使用常规方法签名的创建方法。我建议使用后者,因为前者假装不是。这不是强制转换,我个人希望能够看到代码根据一些输入创建一个新实例。

您能提供一些真实的示例吗?你的答案是最好的!列表编号=新列表{1,2,3};Func numToStringWithLPad=i=>Number:+i;var numastring=numbers.SelectnumToStringWithLPad;numAsString.ToList.ForEachi=>Console.WriteLinei;输出:编号:1编号:2编号:3
var iweilCopy = sil.Select(item => new InvoiceWithEntryInfo()
{
  IdWEI = item.Id,
  NameWEI = item.Name,
  ....
}).ToList();
ResultType ConvertMethod(StartType input)
outputList = inputList.Select(ConvertMethod).ToList();
public static explicit operator InvoiceWithEntryInfo(ServiceInfo item){
     return new InvoiceWithEntryInfo {
             IdIWEI = item.ID,
             AmountIWEI = item.Amount,
             DateIWEI = item.Date};
 }