gpt4 book ai didi

c# - 使用 LINQ 使搜索方法通用

转载 作者:行者123 更新时间:2023-11-30 22:39:08 25 4
gpt4 key购买 nike

我的项目中有一个方法会一遍又一遍地重复:

public PAC PAC_GetByCodiPac(string codiPac)

{

var sel = _gam.PAC.Where(pac => pac.CODI_PAC == codiPac);

if (sel.Count() > 0)
return sel.First();
return null;
}

PAC 表的意思是(患者),所以我对所有的表都有这些方法。我怎样才能为此制定一个通用方法?提前致谢。

最佳答案

这是您的通用方法。请注意,正如其他人指出的那样,FirstOrDefault 比 count 然后 first 更好,所以我在这里使用它。但也可以编写表达式,使其模仿原始代码的作用。如果您需要其他帮助,请告诉我。

public static T GetByCodi<T>(IQueryable<T> table, string codi, string fieldName) where T : class
{
// x
ParameterExpression parameter = Expression.Parameter(typeof(T), "x");
Expression currentExpression = parameter;
Type currentType = typeof(T);
PropertyInfo property = currentType.GetProperty(fieldName);

// x.CODI_xxx
currentExpression = Expression.Property(currentExpression, property);

// x.CODI_xxx == codi
currentExpression = Expression.Equal(currentExpression, Expression.Constant(codi));

// x => x.CODI_xxx == codi
LambdaExpression lambdaExpression = Expression.Lambda(currentExpression, parameter);

return table.FirstOrDefault((Func<T, bool>)lambdaExpression.Compile());
}

你可以这样使用它:

PAC xxx = GetByCodi<PAC>(_gam.PAC, codiPac, "CODI_PAC");

编辑 1:我根据评论修改了代码,这样你就可以传入任意的ID字段名了。

关于c# - 使用 LINQ 使搜索方法通用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5880056/

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