gpt4 book ai didi

c# - Lambda .Where 对字符串的限制

转载 作者:行者123 更新时间:2023-11-30 20:36:37 25 4
gpt4 key购买 nike

我有这个方法:

public List<object> GetThings(List<Guid> listOfGuids)
{
var query = serviceContext.Xrm.crmEntity;
bool anyTypeOfSearch = false; // use this to know if we have actually applied any search criteria.

if(listOfGuids != null && listOfGuids.Count > 0)
{
query = query.Where(x => listOfGuids.Contains(x.lgc_muncipalityid.Id));
anyTypeOfSearch = true;
}

var result = new List<object>();
if(anyTypeOfSearch) // instead of a variable here, can i check if there are any whereconditions applied to the query?
result = query
.Select(x => new SupplierSearchResultModel()
{
Id = x.Id,
Name = x.lgc_name,
})
.ToList();

LogMessage("GetThings.Query", <insert code to get query.Where condition tostring()>);

return result;
}

在实际代码中,有几种不同的 if 结构,其中包含 .Where 条件,有时调用可以在没有任何参数的情况下到达此代码。在这种情况下,我不想运行查询,因为结果集会很大。所以我只想在至少应用一次 .Where() 条件的情况下运行查询。

现在我的问题是,我可以检查 lambda 查询变量是否应用了任何 .Where() 条件,而无需像我一样使用外部 bool 值吗?

另一个有趣的用法是,如果有某种方法可以获取某种 query.Where().ToString() 方法,该方法将显示将应用哪些条件可以登录错误的情况...

最佳答案

快速而肮脏,如果你不关心有一个漂亮的结果:

LogMessage(query.Expression.ToString());

但是它不会显示数组参数的内容。

编辑 更好的解决方案:

1) 你要找的是一个表达式访问者。适合你的模板want to do here ,然后应该像这样使用:

LogMessage(query.ToPrettyString());

2) 考虑一个表达式 query.Where(x=>x.member == GetSomething()) 你希望它像那样打印吗?还是希望 GetSomething() 结果显示为字符串结果?如果是第二种解决方案,那么这就是你可以做的事 with this

关于c# - Lambda .Where 对字符串的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36712097/

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