Linq表达式中的一个问题

时间:2011-05-18 13:58:16

标签: c# linq entity-framework

这段代码有什么问题? 我在最后一行

中遇到了这个例外
  

无法创建常量值   类型   '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();

2 个答案:

答案 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();