2017-07-05 32 views
0

我正在尝试使用linq dynamic创建一个selec,它返回一个特定的对象,但我总是收到相同的错误消息: '(' 预计Select System using System.Linq.Dynamic is returned“'('expected”fault

我选择代码:

var resultCollection = manyPartEntireCollection 
       .Select("new MyNamespace.OneToManyViewModel(@0 as OnePartId, Id as ManyPartId, Name as Name, @1.Contains(outerIt.Id) as Enable)", onePartId, manyParIds) 
       .Cast<OneToManyViewModel>() 
       .ToList() 
       ; 

感谢

+0

是否有任何具体的原因使用动态LINQ这个小直接查询? – Krishna

+0

“Id”和“Name”是根据实体而变化的属性。这只是一个例子,但是这个属性是参数化的。如果我使用动态的方式,它工作正常,但是当我尝试设置预定义的类,如“OneToManyViewModel”的情况下,发生此错误。 –

回答

1

从您的示例中的主要问题是 “什么是outerIt”(@ 1.Contains(outerIt.Id) )这看起来只是一个更大的查询,你可能想要pos整套表达式。在一个Linq语句中可能是可能的,但是当涉及到查看模型和原生.Net方法时,我经常会碰到Linq2Entities/Linq2SQL的奇怪现象,结构,所以我倾向于默认选择数据分别到结束格式。

var resultCollection = manyPartEntireCollection 
    .Select(x => new { ManyPartId = x.Id, x.Name }) 
    .ToList() 
    .Select(x => new OneToManyViewModel 
    { 
     OnePartId = onePartId, 
     ManyPartId = x.ManyPartId, 
     Name = x.Name, 
     IsEnabled = manyPartIds.Contains(x.ManyPartId) 
    }).ToList(); 

关于这样的代码注意的一点是:最初你可能有数据的合理数量,但在路上你会遇到与.ToList()表达潜在的性能和资源问题。 (项目排名,没有上限。)

更新:如果需要DynamicLinq,那么你就可以实现由dahlbyk在此线程所提供的解决方案:System.LINQ.Dynamic: Select(" new (...)") into a List<T> (or any other enumerable collection of <T>)

为System.Linq.Dynamic源,可以发现在这里:https://github.com/meatGUY/System.Linq.Dynamic(更新,因为它看起来更高达日期meatGUY叉)

我创建可用此实现这里叉子:https://github.com/StevePy/System.Linq.Dynamic我会拂去了拉请求meatGUY,看看它是否值得结合。

我做了修改,它似乎做你所期望的。不知道为什么这还没有正式纳入,因为它有一定的意义。 :)

他的指令是很容易跟随,你会最终有一个电话,看起来像:

var resultCollection = manyPartEntireCollection 
    .Select<OneToManyViewModel>("new (@0 as OnePartId, Id as ManyPartId, Name as Name, @1.Contains(outerIt.Id) as Enable)", onePartId, manyParIds) 
    .ToList(); 

我有一个类似的对象模型测试了它与包含设置在一个布尔标志视图模型,它工作的一种享受。警告虽然是在“outerIt”的参考。

+0

当我尝试通过动态模式制作时,它工作正常。但是当我尝试设置一个类型时,如“OneToManyViewModel”类,就会发生错误。它看起来像错误是在“新MyNamespace.OneToManyViewModel(”。此外,正如我上面回答Kishna,我需要的代码是动态的,并返回这种指定的类型。Thx - –

+0

我想我找到了什么解决方案你正在寻找,我已经更新了我的答案,详细信息以及如何在Dynamic Linq Select上实现通用返回类型的链接。 –

+0

工作正常!Thx! –

相关问题