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".
怎么克服这个?当我将数据传递给对象或如何将数据传递到下一个表单时,如何进行转换?
有了这个,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)
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |