我查询数据库并使用以下两种方法将结果推送到控制台和文件:
var result = from p in _db.Pages
join r in rank on p.PkId equals r.Key
orderby r.NumPages descending
select new KeyNameCount
{
PageID = p.PkId,
PageName = p.Name,
Count = r.NumPages
};
WriteFindingsToFile(result, parentId);
WriteFindingsToConsole(result, parentId);
Run Code Online (Sandbox Code Playgroud)
当用作两个方法调用中的参数时,IEnumerable <T>,而不是IQuerable <T>用作结果的参数类型.
在两次调用中,结果都在foreach中迭代.这导致针对数据库的两个相同的调用,每个方法一个.
我可以将这两个方法重构为一个并且只使用一个foreach,但这很快就会变得非常难以维护(添加写入html,写入xml等)
我很确定这是一个非常常见的问题,但使用谷歌并没有让我更聪明,所以我转向你们:-)
我们有一个数据库,其中一列包含复合枚举整数值.我们需要删除特定枚举整数值的所有这些值(如果有的话),但保留其余值.
[Flags]
public enum MyEnum
{
Enum1 = 1,
Enum2 = 2,
Enum3 = 4,
Enum4 = 8,
}
Run Code Online (Sandbox Code Playgroud)
在我们找到的数据库中
Row MyEnumSettings
1 3 (Enum1 | Enum2)
2 8 (Enum4)
3 6 (Enum2 | Enum3)
4 14 (Enum2 | Enum3 | Enum4)
Run Code Online (Sandbox Code Playgroud)
我们想要从每一行中删除Enum3并最终结束
Row MyEnumSettings
1 3 (no change)
2 8 (no chnage)
3 2 (removed Enum3)
4 10 (removed Enum3)
Run Code Online (Sandbox Code Playgroud)
我们可以使用Enum.IsDefined来检查整数是否是枚举的一部分(不确定它是否适用于复合整数值..).但是,我们如何检查给定的整数值是否包含枚举的特定部分?
我正在使用.Net Framework 4,mvc 3和实体框架(最新稳定版)
在索引页面上,我希望能够过滤每一列.LINQ使用distinct()方法为每列检索过滤器值.我没有找到一种很好的方法来重用为每列检索这些值的方法 - 它们基本相同,唯一区分它们的是使用的列名,因此使用一种方法而不是几种方法会很好.
public List<string> GetLevels()
{
return _db.Logs.Select(l => l.Level).Distinct().ToList();
}
public List<string> GetOrders()
{
return _db.Logs.Select(l => l.Order).Distinct().ToList();
}
Run Code Online (Sandbox Code Playgroud)
如何使用我想从中检索数据的列名注入lambda表达式?像这样的东西:
public List<string> GetFilterValues(string columName)
{
return _db.Logs.Select(l => l.columnName).Distinct.ToList();
}
Run Code Online (Sandbox Code Playgroud)