লিঙ্ক উপস্থিত রয়েছে এমন তালিকাতে বস্তুগুলি নির্বাচন করুন যেখানে IN (A, B, C)


169

আমি একটি তালিকা আছে orders
আমি ordersআদেশের স্থিতির একটি সেটের ভিত্তিতে নির্বাচন করতে চাই ।

তাই মূলত select orders where order.StatusCode in ("A", "B", "C")

// Filter the orders based on the order status
var filteredOrders = from order in orders.Order
                     where order.StatusCode.????????("A", "B", "C")
                     select order;

এত তাড়াতাড়ি উত্তর দেওয়া সমস্ত ধন্যবাদ। ল্যাম্বডা সমাধানের জন্য এসপি আমি এখনও ল্যাম্বদা এক্সপ্রেশন দিয়ে কিছুই করেনি। আমি ধরে নিয়েছি আমি (o =>! (স্ট্যাটাস.স কনটেনস (ও। অর্ডারহিডারঅর্ডার স্ট্যাটাসকোড)) ব্যবহার করে একটি নট না করে করব
মার্টিনস

উত্তর:


288

আপনার স্থিতি-কোডগুলিও একটি সংগ্রহ, তাই ব্যবহার করুন Contains:

var allowedStatus = new[]{ "A", "B", "C" };
var filteredOrders = orders.Order.Where(o => allowedStatus.Contains(o.StatusCode));

বা প্রশ্নের বাক্য বাক্সে:

var filteredOrders = from order in orders.Order
                     where allowedStatus.Contains(order.StatusCode)
                     select order;

1
আমি বলব যে অনুমোদিত স্ট্যাটাসের জন্য অ্যারের পরিবর্তে হ্যাশসেট ব্যবহার করুন কারণ হ্যাশসেটের রয়েছে পদ্ধতিটি দ্রুততম এবং এতে যদি 1000 টিরও বেশি আইটেম থাকে তবে অ্যারের সাথে কার্য সম্পাদনের সমস্যা থাকবে issues varmittedStatus = নতুন হ্যাশসেট <স্ট্রিং> A "এ", "বি", "সি"};
জে শাহ

15
var statuses = new[] { "A", "B", "C" };

var filteredOrders = from order in orders.Order
                             where statuses.Contains(order.StatusCode)
                             select order;

15

এনবি: এটি অবজেক্টের জন্য লাইনকিউ, আমি এটি 100% নিশ্চিত নই যদি এটি সত্তায় লিঙ্কে কাজ করে, এবং এখনই এটি চেক করার কোনও সময় নেই। আসলে এটিকে [এ, বি, সি] তে x এ অনুবাদ করা খুব কঠিন নয় তবে আপনাকে নিজের জন্য যাচাই করতে হবে।

সুতরাং, পরিবর্তে কনটেন্সের প্রতিস্থাপন হিসাবে ???? আপনার কোডটিতে আপনি যে কোনও লিনকুইউশ যেকোনটি ব্যবহার করতে পারেন :

// Filter the orders based on the order status
var filteredOrders = from order in orders.Order
                     where new[] { "A", "B", "C" }.Any(s => s == order.StatusCode)
                     select order;

এটি এসকিউএল থেকে আপনি যা জানেন তার বিপরীত কারণ এটি এত স্পষ্ট নয়।

অবশ্যই আপনি যদি এখানে সাবলীল বাক্য গঠন পছন্দ করেন তবে তা হ'ল:

var filteredOrders = orders.Order.Where(order => new[] {"A", "B", "C"}.Any(s => s == order.StatusCode));

এখানে আমরা আবার লাইনকিউয়ের একটি চমক দেখি (যেমন জোদা-বক্তৃতা যা শেষে নির্বাচন করে। তবে এটি এই অর্থে একেবারেই যুক্তিযুক্ত যে এটি একটি তালিকাতে (সেট, সংগ্রহ) অন্তত আইটেমগুলির মধ্যে (যে কোনও একটি) একক মানের সাথে মেলে কিনা তা পরীক্ষা করে ।


12

Containsফাংশন দিয়ে চেষ্টা করুন ;

একটি সিকোয়েন্স একটি নির্দিষ্ট উপাদান রয়েছে কিনা তা নির্ধারণ করে।

var allowedStatus = new[]{ "A", "B", "C" };
var filteredOrders = orders.Order.Where(o => allowedStatus.Contains(o.StatusCode));

-3

কেবল সতর্কতা অবলম্বন করুন, .Contains()স্ট্রিং সহ যে কোনও স্ট্রিংয়ের সাথে মিল পাবেন যা আপনি আশা করেন না। যেমন যেমন new[] { "A", "B", "AA" }.Contains("A")আপনাকে A এবং AA উভয়ই ফিরিয়ে দেবে যা আপনি চাইবেন না। আমাকে তা কামড়েছে।

.Any()বা .Exists()নিরাপদ পছন্দ


নতুন []। "বি", "এএ"}। কনটেন্টস ("এ") মিথ্যা ফিরিয়ে দেবে, সত্য নয়।
জে শাহ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.