如何将表达式作为参数传递给 LINQ 查询
How to pass an expression to a LINQ query as a parameter
我有一些这样的陈述:
if (mediaCode.IndexOf(',') > 0) {
entries = entries.Where(c => mediaCode.Contains(c.Mediacode));
}
else {
entries = entries.Where(c => c.Mediacode == mediaCode);
}
然后:
if (contentType.IndexOf(',') > 0) {
entries = entries.Where(c => contentType.Contains(c.Contenttype));
}
else {
entries = entries.Where(c => c.Contenttype == contentType);
}
我想创建一个函数,我只传递字符串和 属性,
类似于: MethodName(contentType, c.Contenttype)
这是怎么做到的?
使用反射(参见 How to get a property value based on the name),你可以这样做:
protected void FilterStrings(ref IEnumerable<StringStruct> entries, string contentType, string fieldName)
{
if (contentType.IndexOf(',') > 0)
{
entries = entries.Where(c => contentType.Contains(c.GetType().GetProperty(fieldName).GetValue(c, null).ToString()));
}
else
{
entries = entries.Where(c => c.GetType().GetProperty(fieldName).GetValue(c, null).ToString() == contentType);
}
}
您可以这样调用该函数:
FilterStrings(ref entries, mediaCode, "Mediacode");
我有一些这样的陈述:
if (mediaCode.IndexOf(',') > 0) {
entries = entries.Where(c => mediaCode.Contains(c.Mediacode));
}
else {
entries = entries.Where(c => c.Mediacode == mediaCode);
}
然后:
if (contentType.IndexOf(',') > 0) {
entries = entries.Where(c => contentType.Contains(c.Contenttype));
}
else {
entries = entries.Where(c => c.Contenttype == contentType);
}
我想创建一个函数,我只传递字符串和 属性, 类似于: MethodName(contentType, c.Contenttype)
这是怎么做到的?
使用反射(参见 How to get a property value based on the name),你可以这样做:
protected void FilterStrings(ref IEnumerable<StringStruct> entries, string contentType, string fieldName)
{
if (contentType.IndexOf(',') > 0)
{
entries = entries.Where(c => contentType.Contains(c.GetType().GetProperty(fieldName).GetValue(c, null).ToString()));
}
else
{
entries = entries.Where(c => c.GetType().GetProperty(fieldName).GetValue(c, null).ToString() == contentType);
}
}
您可以这样调用该函数:
FilterStrings(ref entries, mediaCode, "Mediacode");