我正在将我的列表选择项放到 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__AnonymousType0
2[System.String,System.Nullable
1[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/