C# 将Linq表达式传递给函数
我想将类的属性列表传递给函数。在基于属性列表的函数中,我将生成一个查询。与Linq Select方法中的功能完全相同。 在这里,我将为Ingress数据库实现这个功能 例如, 在前端,我想运行一个选择,如下所示 我的实体类是这样的C# 将Linq表达式传递给函数,c#,linq,anonymous-function,linq-expressions,dblinq,C#,Linq,Anonymous Function,Linq Expressions,Dblinq,我想将类的属性列表传递给函数。在基于属性列表的函数中,我将生成一个查询。与Linq Select方法中的功能完全相同。 在这里,我将为Ingress数据库实现这个功能 例如, 在前端,我想运行一个选择,如下所示 我的实体类是这样的 public class Customer { [System.Data.Linq.Mapping.ColumnAttribute(Name="Id",IsPrimaryKey=true)] public string Id { get; set; }
public class Customer
{
[System.Data.Linq.Mapping.ColumnAttribute(Name="Id",IsPrimaryKey=true)]
public string Id { get; set; }
[System.Data.Linq.Mapping.ColumnAttribute(Name = "Name")]
public string Name { get; set; }
[System.Data.Linq.Mapping.ColumnAttribute(Name = "Address")]
public string Address { get; set; }
[System.Data.Linq.Mapping.ColumnAttribute(Name = "Email")]
public string Email { get; set; }
[System.Data.Linq.Mapping.ColumnAttribute(Name = "Mobile")]
public string Mobile { get; set; }
}
我想调用这样的选择函数
var result = dataAccessService.Select<Customer>(C=>C.Name,C.Address);
var result=dataAccessService.Select(C=>C.Name,C.Address);
然后,使用result可以得到Name和Address属性的值
我想我的选择函数应该是这样的
var result = dataAccessService.Select<Customer>(C=>C.Name,C.Address);
(*我认为这应该使用Linq表达式来完成。但我不确定输入参数和返回类型是什么。*)
类数据访问服务
{
//我不确定这个返回类型和输入类型,泛型类型。
公共树结果选择(表达式选择器)
{
//在这里,我想遍历调用方传递的属性列表。
//这里使用属性列表,
//我可以获取ColumnAttribute名称值并生成一个select查询。
}
}
这是一种创建类似Linq的功能的尝试。但我不是Linq表达式的专家
麻省理工学院有一个项目电话,但这是一个大项目,我仍然无法从中得到任何有用的东西
有人能帮我开始吗,或者有人能给我链接一些有用的资源来阅读这篇文章。你要做的是创建一个由姓名和地址组成的新匿名类型。这很容易通过长格式linq实现(由于缺乏更好的解释,我编造了这个术语)。以下是来自Microsoft的示例,链接如下:
public void Linq11()
{
List<Product> products = GetProductList();
var productInfos =
from p in products
select new { p.ProductName, p.Category, Price = p.UnitPrice };
Console.WriteLine("Product Info:");
foreach (var productInfo in productInfos)
{
Console.WriteLine("{0} is in the category {1} and costs {2} per unit.", productInfo.ProductName, productInfo.Category, productInfo.Price);
}
}
public void Linq11()
{
List products=GetProductList();
var productInfos=
产品中的p
选择新{p.ProductName,p.Category,Price=p.UnitPrice};
Console.WriteLine(“产品信息:”);
foreach(productInfos中的var productInfo)
{
Console.WriteLine(“{0}属于{1}类,每单位成本为{2}”)、productInfo.ProductName、productInfo.category、productInfo.Price);
}
}
详情:
更新:
那么你是想做这样的事吗
var result = dataAccessService.Select<Customer>(c => c.Name, c => c.Address);
public object[] Select<TSource>(params Expression<Func<TSource, object>>[] selectors)
{
var toReturn = new object[selectors.Count()];
foreach (var s in selectors)
{
var func = s.Compile();
//TODO: If you implement Select a proper extension method, you can easily get the source
toReturn[i] = func(TSource);
}
return toReturn;
}
var result=dataAccessService.Select(c=>c.Name,c=>c.Address);
公共对象[]选择(参数表达式[]选择器)
{
var toReturn=新对象[selectors.Count()];
foreach(选择器中的变量s)
{
var func=s.Compile();
//TODO:如果实现Select适当的扩展方法,您可以很容易地获得源代码
toReturn[i]=func(TSource);
}
回归回归;
}
我不明白你为什么要把Select作为DataAccessService的一个功能来实现?您是否试图将其创建为扩展方法,而不是?
如果这不是你的意思,你需要重新表述你的问题,正如一位评论者所建议的,告诉我们你不需要什么,你希望我们如何设计它。你试图做的是创建一个由姓名和地址组成的新匿名类型。这很容易通过长格式linq实现(由于缺乏更好的解释,我编造了这个术语)。以下是来自Microsoft的示例,链接如下:
public void Linq11()
{
List<Product> products = GetProductList();
var productInfos =
from p in products
select new { p.ProductName, p.Category, Price = p.UnitPrice };
Console.WriteLine("Product Info:");
foreach (var productInfo in productInfos)
{
Console.WriteLine("{0} is in the category {1} and costs {2} per unit.", productInfo.ProductName, productInfo.Category, productInfo.Price);
}
}
public void Linq11()
{
List products=GetProductList();
var productInfos=
产品中的p
选择新{p.ProductName,p.Category,Price=p.UnitPrice};
Console.WriteLine(“产品信息:”);
foreach(productInfos中的var productInfo)
{
Console.WriteLine(“{0}属于{1}类,每单位成本为{2}”)、productInfo.ProductName、productInfo.category、productInfo.Price);
}
}
详情:
更新:
那么你是想做这样的事吗
var result = dataAccessService.Select<Customer>(c => c.Name, c => c.Address);
public object[] Select<TSource>(params Expression<Func<TSource, object>>[] selectors)
{
var toReturn = new object[selectors.Count()];
foreach (var s in selectors)
{
var func = s.Compile();
//TODO: If you implement Select a proper extension method, you can easily get the source
toReturn[i] = func(TSource);
}
return toReturn;
}
var result=dataAccessService.Select(c=>c.Name,c=>c.Address);
公共对象[]选择(参数表达式[]选择器)
{
var toReturn=新对象[selectors.Count()];
foreach(选择器中的变量s)
{
var func=s.Compile();
//TODO:如果实现Select适当的扩展方法,您可以很容易地获得源代码
toReturn[i]=func(TSource);
}
回归回归;
}
我不明白你为什么要把Select作为DataAccessService的一个功能来实现?您是否试图将其创建为扩展方法,而不是?
如果这不是你的意思,你需要重新表述你的问题,正如一位评论者所建议的,告诉我们你需要什么,而不是你希望我们如何设计它。不确定你想要实现什么。。。你想得到所有客户的姓名和地址吗?Kalin,在我的Select方法中,我想迭代通过的poperty列表。在我的例子中,它应该是只给我名字和地址属性。你描述了你想要做什么。你能描述一下你为什么想做这件事,也就是说,你想实现什么目标吗?我想我已经提到了我想生成一个类似于Linq的查询为什么要创建一个新的
Select
函数,而不是实现IQueryable
并依赖预定义的Queryable。Select
?不确定要实现什么。。。你想得到所有客户的姓名和地址吗?Kalin,在我的Select方法中,我想迭代通过的poperty列表。在我的例子中,它应该是只给我名字和地址属性。你描述了你想要做什么。你能描述一下你为什么想做这件事,也就是说,你想实现什么目标吗?我想我已经提到了我想生成一个像Linq中那样的查询为什么你要创建一个新的Select
函数,而不是实现IQueryable
并依赖预定义的Queryable。Select
?很抱歉,duluca,你没有得到它,我想把这个匿名类型传递到一个函数中,在函数中,我想迭代