Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用linq表作为参数?_C#_Linq - Fatal编程技术网

C# 如何使用linq表作为参数?

C# 如何使用linq表作为参数?,c#,linq,C#,Linq,例如,一个非常简单的方法: private int GetCount(ITable table) { return (from T in table select T).Count(); } 你是说像这样的 private int GetCount<T>(IQueryable<T> table) { // return (from T in table select T).Count(); return table.Count(); } privat

例如,一个非常简单的方法:

private int GetCount(ITable table) {

  return (from T in table select T).Count();
}

你是说像这样的

private int GetCount<T>(IQueryable<T> table) {
   // return (from T in table select T).Count();
   return table.Count();
}
private int GetCount(IQueryable表){
//返回(从表中的T中选择T).Count();
return table.Count();
}

顺便说一下,为什么不直接在对象上调用
Count()

您的意思是这样的

private int GetCount<T>(IQueryable<T> table) {
   // return (from T in table select T).Count();
   return table.Count();
}
private int GetCount(IQueryable表){
//返回(从表中的T中选择T).Count();
return table.Count();
}
顺便说一下,为什么不直接在对象上调用
Count()

私有int GetCount(IQueryable表,int intID)

那是PKID吗?答案不应该是0还是1?无论如何您必须动态地构建
表达式。类似于(未经测试,):

static tenty GetCount(此DataContext ctx,int键),其中tenty:class
{
返回GetCount(ctx,键);
}
静态TEntity GetCount(此DataContext ctx,TKey键),其中TEntity:class
{
var table=ctx.GetTable();
var pkProp=(来自ctx.Mapping.GetMetaType(typeof(tenty)).DataMembers中的成员
其中member.IsPrimaryKey
选择member.member.Single();
ParameterExpression param=表达式参数(typeof(tenty),“x”);
memberExp;
开关(pkProp.MemberType)
{
case MemberTypes.Field:memberExp=Expression.Field(param,(FieldInfo)pkProp);break;
case MemberTypes.Property:memberExp=Expression.Property(param,(PropertyInfo)pkProp);break;
默认值:抛出新的NotSupportedException(“无效的主键成员:“+pkProp.Name”);
}
表达式体=表达式.Equal(
memberExp,Expression.Constant(key,typeof(TKey));
var谓词=Expression.Lambda(body,param);
返回表.计数(谓词);
}
关于您的评论:

私有int GetCount(IQueryable表,int intID)

那是PKID吗?答案不应该是0还是1?无论如何您必须动态地构建
表达式。类似于(未经测试,):

static tenty GetCount(此DataContext ctx,int键),其中tenty:class
{
返回GetCount(ctx,键);
}
静态TEntity GetCount(此DataContext ctx,TKey键),其中TEntity:class
{
var table=ctx.GetTable();
var pkProp=(来自ctx.Mapping.GetMetaType(typeof(tenty)).DataMembers中的成员
其中member.IsPrimaryKey
选择member.member.Single();
ParameterExpression param=表达式参数(typeof(tenty),“x”);
memberExp;
开关(pkProp.MemberType)
{
case MemberTypes.Field:memberExp=Expression.Field(param,(FieldInfo)pkProp);break;
case MemberTypes.Property:memberExp=Expression.Property(param,(PropertyInfo)pkProp);break;
默认值:抛出新的NotSupportedException(“无效的主键成员:“+pkProp.Name”);
}
表达式体=表达式.Equal(
memberExp,Expression.Constant(key,typeof(TKey));
var谓词=Expression.Lambda(body,param);
返回表.计数(谓词);
}

Linq包含这个惊人的IQueryable接口,让我们可以扩展查询,而无需实际向数据库发送任何查询。这样,您就可以在应用程序中安全可靠地传递查询,真正需要实际数据的每个类都会将实际查询发送到数据库。 例如,您有一个返回所有用户查询的方法:

public IQueryable<User> GetAll()
{
return from user in dbContext.Users select user;
}

在上面的示例列表()中方法将导致Linq向数据库发送查询。

Linq包含这个惊人的IQueryable接口,允许我们扩展查询,而无需实际向数据库发送任何查询。这样,您就可以在应用程序中安全可靠地传递查询,真正需要实际数据的每个类都会将实际查询发送到数据库。 例如,您有一个返回所有用户查询的方法:

public IQueryable<User> GetAll()
{
return from user in dbContext.Users select user;
}

在上面的示例中,List()方法将导致Linq向数据库发送查询。

非常好。但是我如何使用where子句呢?private int GetCount(IQueryable table,int intID){return(从table where table.ID==intID select T.Count();}是的,这是可行的,但您可以直接使用lambda表达式:
table.where(row=>row.ID==ID.Count()
@firatkuck为什么不能访问行ID?如果你不能访问它,那你就倒霉了。太好了。但是我如何使用where子句呢?private int GetCount(IQueryable table,int intID){return(从table where table.ID==intID select T.Count();}是的,这是可行的,但您可以直接使用lambda表达式:
table.where(row=>row.ID==ID.Count()
@firatkuck为什么不能访问行ID?如果你不能访问它,那你就倒霉了。