gpt4 book ai didi

c# - 在 LINQ 中使用字符串作为字段名

转载 作者:太空狗 更新时间:2023-10-29 17:33:23 24 4
gpt4 key购买 nike

看下面的代码。我想用参数 field 中收到的字段名称替换 USERNAME。此方法必须能够在多个字段上进行一些搜索。

谢谢

public void Searching(string field, string stringToSearch)
{
var res =
from user in _dataContext.USERs where
user.USERNAME.Contains(stringToSearch)
select new
{
Id = user.ID,
Username = user.USERNAME
};

}

最佳答案

你需要忘记匿名类型,也许使用 Tuple<int,string>反而;但是:怎么样:

IQueryable<Foo> source = // YOUR SOURCE HERE
// in-memory dummy example:
// source = new[] {
// new Foo {Id = 1, Bar = "abc"},
// new Foo {Id = 2, Bar = "def"}
// }.AsQueryable();

string field = "Bar";
string stringToSearch = "d";
var param = Expression.Parameter(typeof (Foo), "x");
var predicate = Expression.Lambda<Func<Foo, bool>>(
Expression.Call(
Expression.PropertyOrField(param, field),
"Contains", null, Expression.Constant(stringToSearch)
), param);
var projection = Expression.Lambda<Func<Foo, Tuple<int, string>>>(
Expression.Call(typeof(Tuple), "Create", new[] {typeof(int), typeof(string)},
Expression.PropertyOrField(param, "Id"),
Expression.PropertyOrField(param, field)), param);
Tuple<int,string>[] data = source.Where(predicate).Select(projection).ToArray();

关于c# - 在 LINQ 中使用字符串作为字段名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11204817/

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