[英]Bitwise OrderBy in Dynamic Linq
I need to be able to perform a string based, bitwise, .OrderBy in dynamic linq.我需要能够在动态 linq 中执行基于字符串的按位 .OrderBy 。
items = items.OrderBy(x => (x.Permissions & 65536) != 0);
vs.对比
items = items.Where("1==1" + where).OrderBy("Permissions & 65536 != 0")
Is this even possible?这甚至可能吗? I don't see any examples for bitwise operators in the download (CSharpSamples.zip\\LinqSamples\\DynamicQuery).
我在下载 (CSharpSamples.zip\\LinqSamples\\DynamicQuery) 中没有看到按位运算符的任何示例。 I can't get anything to work and I can't find any examples.
我什么也做不了,也找不到任何例子。 Help!
帮助!
You can reorder the columns of the data base on string inputs.您可以根据字符串输入对数据库的列重新排序。 The code below is tested and works.
下面的代码经过测试并有效。
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
namespace ConsoleApplication75
{
class Program
{
static void Main(string[] args)
{
//u = user
//g = group
//s = system
//r = read
//w = write
//e = execute
//array below represents the normal position of the permissions
List<string> permissions = new List<string>() { "ue", "uw", "ur", "ge", "gw", "gr", "se", "sw", "sr" };
//below is the order we actually want
List<string> sortOrder = new List<string>() { "ue", "ge", "se", "uw", "gw", "sw", "ur", "gr", "sr" };
List<cFile> files = new List<cFile>() {
new cFile() { name = "A", permission = 0x001},
new cFile() { name = "B", permission = 0x002},
new cFile() { name = "C", permission = 0x004},
new cFile() { name = "D", permission = 0x008},
new cFile() { name = "E", permission = 0x010},
new cFile() { name = "F", permission = 0x020},
new cFile() { name = "G", permission = 0x040},
new cFile() { name = "H", permission = 0x080},
new cFile() { name = "I", permission = 0x100}
};
//now reorder the columns
var tempData = files.Select(x => new { files = x, shiftedPermissions = Enumerable.Range(0, 9).Select(y => (permissions.IndexOf(sortOrder[y]) - y >= 0) ?
(1 << y) & (x.permission >> (permissions.IndexOf(sortOrder[y]) - y)) :
(1 << y) & (x.permission << (y - permissions.IndexOf(sortOrder[y])))).Sum()
}).ToList();
List<cFile> sortedPermissions = tempData.OrderBy(x => x.shiftedPermissions).Select(x => x.files).ToList();
}
}
public class cFile
{
public string name { get; set; }
public UInt32 permission { get; set; }
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.