转换在LINQ对象中创建的值

cha*_*ind 1 .net c# linq casting

我正在将我的列表选中的项目设置为DataGrid这样.

using (REntities RAEntity = new REntities())
{
    var all = RAEntity.TBLM_PRODUCT.ToList<DataControllers.TBLM_PRODUCT>();
    var selectionList = all.Where(x => x.PRODUCT_PROGROUP == "GL").Select(p => new { p.PRODUCT_DESC, p.PRODUCT_SPRICE }).ToList();

    bs.DataSource = selectionList;
    dg.DataSource = bs;
}
Run Code Online (Sandbox Code Playgroud)

DataGridView选择时,在一个按钮点击我得到我TextBox的其他形式的价值.

if (window.ShowDialog() == DialogResult.OK)
{    
    selectedProduct = (DataControllers.TBLM_PRODUCT)bs.Current;
    txtServiceType.Text = selectedProduct.PRODUCT_DESC.ToString();
Run Code Online (Sandbox Code Playgroud)

我选择的产品声明如下:

public partial class TBLM_PRODUCT
{           
    public string PRODUCT_CODE { get; set; }
    public string PRODUCT_DESC { get; set; }
    public string PRODUCT_ISBN { get; set; }
    public string PRODUCT_SUPPLIER { get; set; }
    public string PRODUCT_PROGROUP { get; set; }
    public Nullable<decimal> PRODUCT_SPRICE { get; set; }
}

private TBLM_PRODUCT selectedProduct;
Run Code Online (Sandbox Code Playgroud)

当我尝试将数据发送到TextBox其他表单时,它会显示一个无效的转换错误,如下所示:

无法将类型为"<> f__AnonymousType0 2[System.String,System.Nullable1 [System.Decimal]]'的对象转换为"TBLM_PRODUCT".

怎么克服这个?当我将数据传递给对象或如何将数据传递到下一个表单时,如何进行转换?

Sal*_*ari 5

有了这个,Select(p => new { p.PRODUCT_DESC, p.PRODUCT_SPRICE })你实际上返回一个匿名类型列表而不是列表TBLM_PRODUCT.将您的代码更改为:

p => new TBLM_PRODUCT {PRODUCT_DESC = p.PRODUCT_DESC, PRODUCT_SPRICE = p.PRODUCT_SPRICE } 
Run Code Online (Sandbox Code Playgroud)

如果您仍然得到错误可能是因为您无法投影到映射实体,那么您需要创建一个DTO类,其中包含来自TBLM_PRODUCT实体的所需属性,如下所示:

public class TBLM_PRODUCTDTO
{
    public string PRODUCT_DESC { get; set; }
    public Nullable<decimal> PRODUCT_SPRICE { get; set; }
    //Other Properties
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用这个DTO:

p => new TBLM_PRODUCTDTO {PRODUCT_DESC = p.PRODUCT_DESC, PRODUCT_SPRICE = p.PRODUCT_SPRICE } 
Run Code Online (Sandbox Code Playgroud)

和:

private TBLM_PRODUCTDTO selectedProduct;
selectedProduct = (TBLM_PRODUCTDTO) bs.Current;
Run Code Online (Sandbox Code Playgroud)