c# - 转换在 LINQ 对象中创建的值

标签 c# .net 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;
}

在选择 DataGridView 时,单击一个按钮,我以类似这样的其他形式为我的 TextBox 获取值。

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

我选择的产品是这样声明的:

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;

当我尝试将数据获取到其他形式的 TextBox 时,它会显示无效的转换错误,如下所示:

Unable to cast object of type '<>f__AnonymousType02[System.String,System.Nullable1[System.Decimal]]' to type ' TBLM_PRODUCT'.

如何克服这个问题?当我将数据传递给对象时如何转换或如何将数据获取到下一个表单?

最佳答案

使用此 Select(p => new { p.PRODUCT_DESC, p.PRODUCT_SPRICE }) 您实际上返回了 anonymous type 的列表而不是 TBLM_PRODUCT 列表。将您的代码更改为:

p => new TBLM_PRODUCT {PRODUCT_DESC = p.PRODUCT_DESC, PRODUCT_SPRICE = p.PRODUCT_SPRICE } 

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

public class TBLM_PRODUCTDTO
{
    public string PRODUCT_DESC { get; set; }
    public Nullable<decimal> PRODUCT_SPRICE { get; set; }
    //Other Properties
}

然后像这样使用这个 DTO:

p => new TBLM_PRODUCTDTO {PRODUCT_DESC = p.PRODUCT_DESC, PRODUCT_SPRICE = p.PRODUCT_SPRICE } 

和:

private TBLM_PRODUCTDTO selectedProduct;
selectedProduct = (TBLM_PRODUCTDTO) bs.Current;

关于c# - 转换在 LINQ 对象中创建的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53680340/

相关文章:

c# - Linq大量更新时极慢

c# - 从 C# 调用 F# 库

c# - 从文本框计数,asp.net

c# - MVVM模式: Commands for several GUI events?

c# - Windows 窗体图片框不能可靠地刷新

.net - 向 Azure Batch 资源添加标签

c# - 在多项目中引发自定义事件

c# - 如何根据另一个列表的元素和条件从一个列表中删除元素?

c# - 如果内部标记与 C# 中的 Linq 值匹配,则删除 XML 节点

c# - 确定相关词的程序化方法?