我使用LINQ来创建我的where子句,如下所示:
var query = from x in context.Xs
select x;
if (y == ...)
{
query = query.Where(x => x.Y == 1);
}
Run Code Online (Sandbox Code Playgroud)
我有很多这些"if .... where"语句.我遇到的问题是,所有这些都加入了使用AND的子句,但我需要所有where子句使用OR.是否有一种简单的方法将此代码移植到OR代码中?或者甚至用OR做出最简单的方法是什么?
谢谢.
我正在使用我自己的IQueryable <>扩展方法来创建可链接查询,例如FindAll().FindInZip(12345).NameStartsWith("XYZ").OrderByHowIWantIt()等然后在延迟执行时创建基于我的单个查询扩展方法链.
但问题是,扩展链中的所有位置(FindXYZ,FindInZip等)将始终组合为AND,这意味着我无法做到这样的事情:
FindAll().FirstNameStartsWith("X").OrLastNameStartsWith("Z")因为我不知道如何在一个单独的Where方法中注入OR.
知道如何解决这个问题吗?
额外; 到目前为止,我理解如何将表达式链接为或者如果我将它们包装起来(例如CompileAsOr(FirstNameStartsWith("A").LastNameStartsWith("Z").OrderBy(..))
我想要做的虽然稍微复杂一点(并且PredicateBuilder在这里没有帮助......)因为我希望以后的IQueryable能够基本上访问先前建立的Where条件,而不必将它们包装起来以创建Or之间他们.
当每个扩展方法返回IQueryable <>时,我理解它应该知道某个地方的查询条件的当前状态,这使我相信应该有一些自动化的方法或在所有先前的Where条件中创建Or而不必包装你想要什么或者.
我正在尝试将以下查询重写为单独的语句:
var sql = Repository.Products.AsQueryable();
sql = sql.Where(x => x.Name == "aaaaa" || x.Name == "bbbbb");
Run Code Online (Sandbox Code Playgroud)
如果我这样做:
sql = sql.Where(x => x.Name == "aaaaa");
sql = sql.Where(x => x.Name == "bbbbb");
Run Code Online (Sandbox Code Playgroud)
那么结果查询等于:
sql = sql.Where(x => x.Name == "aaaaa" && x.Name == "bbbbb");
Run Code Online (Sandbox Code Playgroud)
有没有想法如何以正确的方式做到这一点?
当我在 iOS 模拟器上为 iOS 构建 flutter 项目时,它给了我一个错误
ld: framework not found Flutter
Run Code Online (Sandbox Code Playgroud)
并且构建失败。
这是我尝试从 xcode 构建 flutter 项目时的错误消息:
export IPHONEOS_DEPLOYMENT_TARGET=9.0
export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang \
-arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.2.sdk \
-L/Users/abhijeetnigoskar/Library/Developer/Xcode/DerivedData/Runner-axtptzubiqvjnbhgcbxfykotbmup/Build/Products/Debug-iphonesimulator \
-L/Users/abhijeetnigoskar/Library/Developer/Xcode/DerivedData/Runner-axtptzubiqvjnbhgcbxfykotbmup/Build/Products/Debug-iphonesimulator/Stripe \
-L/Users/abhijeetnigoskar/Library/Developer/Xcode/DerivedData/Runner-axtptzubiqvjnbhgcbxfykotbmup/Build/Products/Debug-iphonesimulator/shared_preferences \
-L/Users/abhijeetnigoskar/Desktop/flutter_workspace/zenspace_pro/ios/Pods/Stripe/InternalFrameworks \
-L/Users/abhijeetnigoskar/Desktop/flutter_workspace/zenspace_pro/ios/Flutter \
-F/Users/abhijeetnigoskar/Library/Developer/Xcode/DerivedData/Runner-axtptzubiqvjnbhgcbxfykotbmup/Build/Products/Debug-iphonesimulator \
-F/Users/abhijeetnigoskar/Desktop/flutter_workspace/zenspace_pro/ios/Pods/../.symlinks/flutter/ios \
-F/Users/abhijeetnigoskar/Desktop/flutter_workspace/zenspace_pro/ios/Flutter \
-filelist /Users/abhijeetnigoskar/Library/Developer/Xcode/DerivedData/Runner-axtptzubiqvjnbhgcbxfykotbmup/Build/Intermediates.noindex/Runner.build/Debug-iphonesimulator/Runner.build/Objects-normal/x86_64/Runner.LinkFileList \
-Xlinker -rpath -Xlinker @executable_path/Frameworks \
-mios-simulator-version-min=9.0 -dead_strip -Xlinker -object_path_lto \
-Xlinker /Users/abhijeetnigoskar/Library/Developer/Xcode/DerivedData/Runner-axtptzubiqvjnbhgcbxfykotbmup/Build/Intermediates.noindex/Runner.build/Debug-iphonesimulator/Runner.build/Objects-normal/x86_64/Runner_lto.o \
-Xlinker -export_dynamic -Xlinker -no_deduplicate \
-Xlinker -objc_abi_version -Xlinker 2 -fobjc-arc \
-fobjc-link-runtime -ObjC -lStripe -lStripe3DS2 -lshared_preferences \
-framework Contacts …Run Code Online (Sandbox Code Playgroud) 在LINQ中,可以逐步构建LINQ查询,如下所示:
var context = new AdventureWorksDataContext();
// Step 1
var query = context.Customers.Where(d => d.CustomerType == "Individual");
// Step 2
query = query.Where(d => d.TerritoryID == 3);
Run Code Online (Sandbox Code Playgroud)
上面的查询将产生一个等效的SQL语句,其WHERE子句包含由AND逻辑运算符组合在一起的两个谓词,如下所示:
SELECT * FROM Customers WHERE CustomerType = 'Individual' AND TerritoryID = 3
Run Code Online (Sandbox Code Playgroud)
是否可以构建LINQ查询以生成等效的SQL语句,progressively以便生成的查询具有WHERE子句,其中谓词由OR逻辑运算符组合在一起,如下所示?
SELECT * FROM Customers WHERE CustomerType = 'Individual' OR TerritoryID = 3
Run Code Online (Sandbox Code Playgroud) 我有一个场景,我需要使用LINQ构建一个SQL查询,其中包含可变数量的OR子句.我正在编写一个函数,它将根据一些输入构建查询.函数定义看起来类似于......
function BuildQuery(ICollection<ColumnsThatNeedToBeTrue> columns)
{
...
}
Run Code Online (Sandbox Code Playgroud)
所以,我给了一个我需要检查的列的集合,并且检查需要使用OR子句.
如果columns数组包含A和B,我需要查询来检查列A是否为真或列为B真.
如果columns数组包含A,B并且C,我需要查询并检查AOR BOR C是否为真.
我不知道如何在一个单一内完成这一切Where,因为我不知道如何逐步增加其他||条款.基于输入数组,我不确定如何在下面包含额外的OR检查.
var query = entities.Where(m => m.A == true || m.B == true ...)
Run Code Online (Sandbox Code Playgroud)
我不能链接Where函数,每个函数用于自己的列检查,因为它使用AND子句构建该查询,我需要OR.
有没有办法使用LINQ构建这样的查询?
我有一个数据表,我试图为列实现服务器端过滤.我允许每列查询多个字符串,并尝试确定跨步所有过滤器的最佳方法.下面是表对象的示例,为简单起见,只有2个参数.
//table models from db
public class Parts
{
public string PartName { get; set; }
public virtual Series Series { get; set; }
}
public class Series
{
public string SeriesName { get; set; }
}
//This is what is passed in from the datatable filter query
public class PartsTable
{
public string PartName { get; set; }
public string SeriesName { get; set; }
}
public IEnumerable<Parts> PartsTableSearch(PartsTable table)
{
//Queries come in as comma separated string
var …Run Code Online (Sandbox Code Playgroud) 有一个模型列表:
List<string> models = new List<string>
{
"abcd1234",
"xycd9999",
"zzz999z",
"ros7777"
};
Run Code Online (Sandbox Code Playgroud)
有过滤器清单:
List<string> filterer = new List<string>
{
"cd",
"9999"
};
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用LINQ来获取包含过滤器项目的所有模型作为其名称的一部分.
对于这个例子:
因此,LINQ操作将返回两个项目的列表:"abcd1234"和"xycd9999".
var filteredList = models
.Where(m => m.Contains("/*HERE WILL BE THE FILTERER ITEMS*/"))
.Distinct()
.ToList();
Run Code Online (Sandbox Code Playgroud)
什么是正确的语法?
c# ×7
linq ×5
.net ×2
contains ×1
datatable ×1
filter ×1
flutter ×1
iqueryable ×1
sql ×1
where-clause ×1