table = () => CampaignCodePaths; Func propertySelector = e => e.Id; int key = 1; Func w-6ren">
gpt4 book ai didi

c# - Linq2Sql 和 lambda 返回 "Method ' System.Object DynamicInvoke(System.Object[] )' has no supported translation to SQL"

转载 作者:太空宇宙 更新时间:2023-11-03 20:31:24 25 4
gpt4 key购买 nike

为什么...

Func<IQueryable<CampaignCodePaths>> table = () => CampaignCodePaths;

Func<CampaignCodePaths, int> propertySelector = e => e.Id;

int key = 1;

Func<CampaignCodePaths, bool> whereSelector = e => propertySelector(e).Equals(key);

table().Where(whereSelector).FirstOrDefault();

...工作但是...

Func<IQueryable<CampaignCodePaths>> table = () => CampaignCodePaths;

Func<CampaignCodePaths, int> propertySelector = e => e.Id;

int key = 1;

table().Where(e => propertySelector(e).Equals(key)).FirstOrDefault();

...返回异常:

Method 'System.Object DynamicInvoke(System.Object[])' has no supported translation to SQL

?

更新

澄清一下:

CampaignCodePath Get(Func<IQueryable<CampaignCodePaths>> table, Func<CampaignCodePaths, int> selector, int key)
{
return table().Where(/*How to I create this expression from selector and key? */).FirstOrDefault();
}

...

Get(() => CampaignCodePaths, e => e.Id, 1)

最佳答案

您的第一段代码是在 .NET 中执行所有过滤,因为您使用的是委托(delegate)而不是表达式树 - 它甚至没有尝试将过滤器转换为 SQL。换句话说,并不是第一个“起作用”而第二个不起作用——而是第一个没有失败,因为它并没有真正尝试做您期望的事情,而第二个却做到了。

第二种形式是调用Queryable.Where(IQueryable<T>, Expression<...>)而第一个正在调用 Enumerable.Where(IEnumerable<T>, Func<...>) .

如果您将代码更改为:

Expression<Func<CampaignCodePaths, bool>> filter = e => e.Id.Equals(key);
table().Where(filter).FirstOrDefault();

那应该没问题

编辑:响应您的编辑,我想您想要这样的东西:

CampaignCodePath Get(Func<IQueryable<CampaignCodePaths>> table,
Expression<Func<CampaignCodePaths, int> selector>,
int key)
{
Expression equal = Expression.Equal(selector, Expression.Constant(key));
var lambda = Expression.Lambda<Expression<Func<CampaignCodePaths, bool>>
(equal, selector.Parameters);
return table().Where(lambda).FirstOrDefault();
}

关于c# - Linq2Sql 和 lambda 返回 "Method ' System.Object DynamicInvoke(System.Object[] )' has no supported translation to SQL",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7385818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com