C# 将linq查询构建为函数 var query=(来自dataContext.Materials中的material 连接dataContext中的materialCategories.materialCategories on material.Id等于 材料类别.材料Id 选择新的 { 材料Id, 材料名称, 材料,拍摄, materialCategories.CategoryName }); //按日期筛选 query=query.Where(x=>x.take>=minDate&&x.take
您不能将匿名对象传递给方法。您必须创建一个类型并从第一次查询返回该类型的新实例。您不能将匿名对象传递给方法。您必须创建一个类型并从第一次查询返回该类型的新实例。泛型将完成所有这些操作或者你C# 将linq查询构建为函数 var query=(来自dataContext.Materials中的material 连接dataContext中的materialCategories.materialCategories on material.Id等于 材料类别.材料Id 选择新的 { 材料Id, 材料名称, 材料,拍摄, materialCategories.CategoryName }); //按日期筛选 query=query.Where(x=>x.take>=minDate&&x.take,c#,linq,C#,Linq,您不能将匿名对象传递给方法。您必须创建一个类型并从第一次查询返回该类型的新实例。您不能将匿名对象传递给方法。您必须创建一个类型并从第一次查询返回该类型的新实例。泛型将完成所有这些操作或者你 var query = (from material in dataContext.Materials join materialCategories in dataContext.MaterialCategories on material.Id equals
var query = (from material in dataContext.Materials
join materialCategories in dataContext.MaterialCategories on material.Id equals
materialCategories.Material.Id
select new
{
material.Id,
material.Name,
material.Taken,
materialCategories.CategoryName
});
//Filter by date
query = query.Where(x => x.Taken >= minDate && x.Taken <= maxDate);
publicIQueryable中间数据(IQueryable查询、DateTime maxdate、DateTime mindate),其中T:YourClass
{
返回query.Where(x=>x.take>=minDate&&x.take泛型将为您完成所有这些
var query = (from material in dataContext.Materials
join materialCategories in dataContext.MaterialCategories on material.Id equals
materialCategories.Material.Id
select new
{
material.Id,
material.Name,
material.Taken,
materialCategories.CategoryName
});
//Filter by date
query = query.Where(x => x.Taken >= minDate && x.Taken <= maxDate);
publicIQueryable中间数据(IQueryable查询、DateTime maxdate、DateTime mindate),其中T:YourClass
{
return query.Where(x=>x.take>=minDate&&x.take您真的不想这样做。将查询保留在LINQ语法中可以让框架优化数据查询。如果将其提取到函数中,则必须从数据库返回所有数据,然后对客户端进行过滤。哎呀!有关更多信息,请参阅“为什么要将LINQ-to-SQL查询表达式转换为表达式树?”在中,您确实不想这样做。将查询保留为LINQ语法可以让框架优化数据查询。如果将其提取到函数中,则必须从数据库返回所有数据,然后对客户端进行筛选。哇!有关更多信息,请参阅”为什么要将LINQ到SQL查询表达式转换为表达式树?中需要使用命名类型而不是未命名类型。
创建一个新类:
public IQueryable<T> betweenDates<T>(IQueryable<T> query, DateTime maxdate, DateTime mindate) where T : YourClass
{
return query.Where(x => x.Taken >= minDate && x.Taken <= maxDate);
}
如果需要,可以将字段设置为属性
而不是:
public class Category
{
int Id;
string Name;
DateTime Taken;
string CategoryName;
}
使用你的课堂:
select new {...}
然后你就可以吃这个了:
select new Category {...}
专用IQueryable筛选器函数(IQueryable查询)
{
query=query.Where(x=>x.take>=minDate&&x.take您需要使用命名类型而不是未命名类型。
创建一个新类:
public IQueryable<T> betweenDates<T>(IQueryable<T> query, DateTime maxdate, DateTime mindate) where T : YourClass
{
return query.Where(x => x.Taken >= minDate && x.Taken <= maxDate);
}
如果需要,可以将字段设置为属性
而不是:
public class Category
{
int Id;
string Name;
DateTime Taken;
string CategoryName;
}
使用你的课堂:
select new {...}
然后你就可以吃这个了:
select new Category {...}
专用IQueryable筛选器函数(IQueryable查询)
{
query=query.Where(x=>x.take>=minDate&&x.take你不能在没有反射的黑客攻击的情况下对匿名对象执行此操作。我将创建一个具有这些属性的类并从函数返回IENumerable。你不能在没有反射的黑客攻击的情况下对匿名对象执行此操作。我将创建一个具有这些属性并返回IENumerab的类从函数中删除对象。您需要将对象提升为真实类型,而不是异常类型,然后您可以执行以下操作:
private IQueryable<Category> FilterFunction(IQueryable<Category> query)
{
query = query.Where(x => x.Taken >= minDate && x.Taken <= maxDate);
return query;
}
private静态Func谓词(DateTime minDate,DateTime maxDate)
{
return x=>x.take>=minDate&&x.take您需要将对象提升为真实类型,而不是异常类型,然后您可以执行以下操作:
private IQueryable<Category> FilterFunction(IQueryable<Category> query)
{
query = query.Where(x => x.Taken >= minDate && x.Taken <= maxDate);
return query;
}
private静态Func谓词(DateTime minDate,DateTime maxDate)
{
return x=>x.taked>=minDate&&x.taked首先自己做一些研究?lambda是函数,这意味着您已经几乎提取了其中的内容。最后的步骤非常简单,因此显然您没有尝试&没有编写您作为示例显示的代码首先自己做一些研究?lambda是函数,这意味着最后的步骤非常简单,显然你还没有尝试&没有编写你作为示例展示的代码是的,需要将它与其他人提供的答案结合起来,形成一个非匿名类,或者你可以提供一个从t中提取日期时间的函数,但在这一点上,function的调用不会比它设计用来替换的方法简单得多。是的,需要将它与其他人提供的答案结合起来,形成一个非匿名类,或者你可以提供一个从t中提取日期时间的函数,但在这一点上,函数调用起来不会比它设计用来替换的方法简单得多。我s在枚举结果之前,不会执行任何DB查询。在LINQ查询成为SQL查询之前,您可以对其应用任何筛选。@Maciej-如果该筛选是函数调用,则不会-框架只能在表达式树上发挥神奇的作用。试试看!(然后更改您的投票:)Robert,很抱歉,您错了。我已检查。在SQL Server停止的情况下运行此操作:ProjectEntities db=new ProjectEntities();IQueryable query=from usr in db。用户选择usr;query=query.Where(u=>u.UserName==“Smith”);if(query.Count()>0)return;它将在Count之前失败。在枚举结果之前,不会执行任何DB查询。在LINQ查询成为SQL查询之前,您可以对其应用任何筛选。@Maciej-如果该筛选器是函数调用,则不会-框架只能在表达式树上发挥神奇的作用。试试看!(然后更改投票:)Robert,很抱歉,你错了。我已经检查过了。在SQL Server停止的情况下运行此操作:ProjectEntities db=new ProjectEntities();IQueryable query=from usr in db。用户选择usr;query=query。其中(u=>u.UserName==“Smith”);如果(query.Count()>0)返回;它将在Count之前失败。