C# 如何查找任何表的最大id。
我想要这样的东西:C# 如何查找任何表的最大id。,c#,linq,C#,Linq,我想要这样的东西: public int NumberStudent() { int i = 0; if (db.Tbl_Student.ToList().Count() > 0) i = db. Tbl_Student.Max(d => d.id); return i; } 但是,我想在任何桌子上使用它: public int FindMaxId(string TableNam
public int NumberStudent()
{
int i = 0;
if (db.Tbl_Student.ToList().Count() > 0)
i = db. Tbl_Student.Max(d => d.id);
return i;
}
但是,我想在任何桌子上使用它:
public int FindMaxId(string TableName)
{
int i =0;
if ('db.'+TableName+'.ToList().Count() > 0' )
i = db. TableName.Max(d => d.id);
return i ;
}
我知道这是错误的,但我不知道该怎么做。下面我围绕现有的Max-extension方法编写了一个简单的包装器,它允许您提供一个空的源代码,即您所说的表 它不会抛出异常,只会返回默认值零 原创的 此实现使用Timothy的方法。通过调用DefaultIfEmpty,我们将使用,并且序列将仅在调用Max时枚举。此外,我们现在使用IQueryable而不是IEnumerable,这意味着在调用此方法之前不必枚举源。正如Scott所说,如果您需要它,您也可以创建一个使用IEnumerable的重载 为了使用扩展方法,您只需要提供一个委托,该委托返回源类型的id,与Max完全相同 您可以为此使用IEnumerable/IQueryable扩展方法
var maxId = db.Tbl_Student.Select(x => x.Id).DefaultIfEmpty(0).Max();
通常,如果您执行Q.DefaultIFEmptyDd,则表示:
如果Q不是空的,给我Q;否则,请给我[D]
db.Tbl_Student.Aggregate0,maxId,s=>Math.MaxmaxId,s.Id
或
db.Tbl_Student.Maxs=>int?s.Id??看看我的答案。有一种不太为人所知的LINQ方法已经存在了。另一种很好的方法,当然。这只猫可以用很多方法剥皮!向上投票:关键是MaxId helper方法的主体可以简单地替换为返回源代码.Selectselector.DefaultIfEmpty0.Max;。支持组合现有操作,而不是从头开始创建新操作。您的MaxId方法实际上会枚举源代码两次。这是非常正确的,谢谢您的提示。如果可以的话,我会用你的方法更新代码片段,我完全同意。甚至可以记下您的第一个实现,以及为什么最好只切换一次枚举源代码,而不是两次。另外,您可以将其改为IQueryable扩展方法,这样就可以在数据库端而不是客户端完成。ToList.Count>0很可能被替换为。它也会提高性能,因为它不需要枚举表两次。啊,我的错。。我现在明白了,这实际上适用于任何表,我的坏+1var maxId=db.Tbl_Student.Maxs=>int?s.Id??谢谢。但我想用这个做任何桌子。我想传递表的名称,它返回maxid。
public static class Extensions
{
public static int MaxId<TSource>(this IQueryable<TSource> source, Func<TSource, int> selector)
{
return source.Select(selector).DefaultIfEmpty(0).Max();
}
}
public class Program
{
YourContext context = new YourContext();
public int MaxStudentId()
{
return context.Student.MaxId(s => s.Id);
}
public static void Main(string[] args)
{
Console.WriteLine("Max student id: {0}", MaxStudentId());
}
}
public static class Extensions
{
public static int MaxId<TSource>(this IQueryable<TSource> source, Func<TSource, int> selector)
{
return source.Select(selector).DefaultIfEmpty(0).Max();
}
}
var maxId = db.Tbl_Student.Select(x => x.Id).DefaultIfEmpty(0).Max();