这段代码有什么问题? 我在最后一行
中遇到了这个例外无法创建常量值 类型 'System.Collections.Generic.IEnumerable`1'。 只有原始类型('如Int32, 支持String和Guid') 这个背景。
var query = from colT in dal.TBL_Gharardad
select colT;
if(lstTarafeGharardadIds.Count>0)
query = from q in query
join id in lstTarafeGharardadIds on q.TarafeGharardadId equals id
select q;
dgvListeGharardad.DataSource = query.ToList();
lastTarafeGharardadIds为List<int>
我也测试
dgvListeGharardad.DataSource = query;
如果if
表达式等于false且此代码
query = from q in query
join id in lstTarafeGharardadIds on q.TarafeGharardadId equals id
select q;
没有运行。但我无法理解我在最后一行得到了错误(在此代码上):
dgvListeGharardad.DataSource = query.ToList();
答案 0 :(得分:2)
我认为linq无法加入内存中的集合(lstTarafeGharardadIds)和数据库表(dal.TBL_Gharardad,dal.v_Gharardad ......)。
类似问题:Why won't this LINQ join statement work?
这应该有效:
var query = (from colT in dal.TBL_Gharardad select colT).AsEnumerable();;
if (lstTarafeGharardadIds.Count>0)
query = from q in query
join id in lstTarafeGharardadIds on q.TarafeGharardadId equals id
select q;
dgvListeGharardad.DataSource = query.ToList();
答案 1 :(得分:0)
无论如何,假设您的命名惯例是正确的。你最终得到:选择colV。选择列会导致选择IEnumerable而不是dataSource所需的原始值。
您可以尝试使用SelectMany选择所需的实际值
dgvListeGharardad.DataSource = query.SelectMany(x => x.[YourProperty]).ToList();