সর্বোচ্চ নাকি ডিফল্ট?


176

একটি লিনকুই ক্যোয়ারী থেকে কোনও মান সারণী না ফেরার সর্বোত্তম উপায় কী? আমি যদি শুধু করি

Dim x = (From y In context.MyTable _
         Where y.MyField = value _
         Select y.MyCounter).Max

কোয়েরিতে কোনও সারি না ফেরালে আমি একটি ত্রুটি পেয়েছি। আমি কাজ করতে পারে

Dim x = (From y In context.MyTable _
         Where y.MyField = value _
         Select y.MyCounter _
         Order By MyCounter Descending).FirstOrDefault

তবে এটি এমন সাধারণ অনুরোধের জন্য কিছুটা অবসন্নতা অনুভব করে। আমি কি এটি করার আরও ভাল উপায়টি মিস করছি?

আপডেট: এখানে পিছনের গল্পটি: আমি চাইল্ড টেবিল থেকে পরবর্তী যোগ্যতা কাউন্টারটি পুনরুদ্ধার করার চেষ্টা করছি (উত্তরাধিকার ব্যবস্থা, আমাকে আরম্ভ করবেন না ...)। প্রতিটি রোগীর জন্য প্রথম যোগ্যতার সারিটি সর্বদা 1, দ্বিতীয়টি 2 ইত্যাদি হয় (স্পষ্টত এটি শিশু টেবিলের প্রাথমিক কী নয়)। সুতরাং, আমি একটি রোগীর জন্য সর্বাধিক বিদ্যমান কাউন্টার মানটি নির্বাচন করছি এবং তারপরে একটি নতুন সারি তৈরি করতে এতে 1 যুক্ত করছি। যখন কোনও বিদ্যমান সন্তানের মান নেই তখন আমার 0 টি ফেরার জন্য ক্যোয়ারী প্রয়োজন (সুতরাং 1 যোগ করা আমাকে 1 টির একটি পাল্টা মান দেবে)। মনে রাখবেন যে উত্তরাধিকারী অ্যাপ্লিকেশনটি পাল্টা মানগুলির মধ্যে শূন্যতার পরিচয় দেয় (যদি সম্ভব হয়) তবে আমি শিশু সারিগুলির কাঁচা গণনার উপর নির্ভর করতে চাই না। প্রশ্নটি খুব জেনারিক করার চেষ্টা করার জন্য আমার খারাপ।

উত্তর:


206

যেহেতু DefaultIfEmptyলিনকিউ থেকে এসকিউএল তে প্রয়োগ করা হয়নি, তাই ত্রুটিটি ফিরে আসার বিষয়ে অনুসন্ধান করেছি এবং একটি আকর্ষণীয় নিবন্ধ পেয়েছি যা সামগ্রিক ফাংশনে নাল সেট নিয়ে কাজ করে। আমি যা পেয়েছি তার সংক্ষিপ্ত বিবরণ হিসাবে, আপনি আপনার নির্বাচনের মধ্যে একটি নালায় কাস্ট করে এই সীমাবদ্ধতাটি পেতে পারেন। আমার ভিবি কিছুটা মরিচা, তবে আমার মনে হয় এটি এমন কিছু হবে:

Dim x = (From y In context.MyTable _
         Where y.MyField = value _
         Select CType(y.MyCounter, Integer?)).Max

অথবা সি # তে:

var x = (from y in context.MyTable
         where y.MyField == value
         select (int?)y.MyCounter).Max();

1
ভিবি সংশোধন করতে, নির্বাচনটি হবে "সিটিটাইপ নির্বাচন করুন (y.MyCounter, পূর্ণসংখ্যা?)"। আমার উদ্দেশ্যে কোনও কিছুইকে 0 তে রূপান্তর করতে আমাকে একটি মূল চেক করতে হবে তবে আমি ব্যতিক্রম ছাড়াই ফলাফল পেতে পছন্দ করি।
gfrizzle

2
ডিফল্টআইফেম্পটির দুটি ওভারলোডগুলির মধ্যে একটি লিনকিউতে এসকিউএল-তে সমর্থিত - এটি যা পরামিতি নেয় না।
দামিয়েনজি

সম্ভবত এই তথ্য তারিখের, হিসাবে আমি শুধু সফলভাবে DefaultIfEmpty উভয় ফরম LINQ এসকিউএল পরীক্ষা
নিল

3
@ নীল: দয়া করে একটি উত্তর দিন। DefaultIfEmpty আমার পক্ষে কাজ করে না: আমি এটির Maxএকটি চাই DateTimeMax(x => (DateTime?)x.TimeStamp)এখনও একমাত্র উপায় ..
duedl0r

1
যদিও ডিফল্টআইফেম্পটিটি এখন লিনকিউ-তে এসকিউএল এ প্রয়োগ করা হয়েছে, এই উত্তরটি আরও ভাল আইএমও হিসাবে থাকবে, যেমন একটি এসকিউএল বিবৃতি 'নির্বাচন করুন মাইকাউন্টার' এর ফলস্বরূপ ফলাফলটি প্রতিফলিত হয় , যেখানে এই উত্তরটির ফলাফল ম্যাক্স (মাইকাউন্টার) এর ফলাফল দেয় একক, সংযুক্ত সারি। (সত্ত্বা ফ্রেমওয়ার্ককরের 2.1.3 পরীক্ষিত।)
কার্ল শারম্যান

107

আমার ঠিক একইরকম সমস্যা ছিল, তবে আমি ক্যুইয়ার সিনট্যাক্সের পরিবর্তে একটি তালিকাতে লিনকিউ এক্সটেনশন পদ্ধতিগুলি ব্যবহার করছিলাম। একটি নুলযোগ্য ট্রিকটিতে কাস্টিং সেখানে কাজ করে:

int max = list.Max(i => (int?)i.MyCounter) ?? 0;

48

এর জন্য কেসের মতো শোনাচ্ছে DefaultIfEmpty(অরক্ষিত কোড অনুসরণ করা হয়েছে):

Dim x = (From y In context.MyTable _
         Where y.MyField = value _
         Select y.MyCounter).DefaultIfEmpty.Max

আমি ডিফল্টআইফেম্পটির সাথে পরিচিত নই, তবে উপরের সিনট্যাক্সটি ব্যবহার করার সময় আমি "এসকিউএল হিসাবে সম্পাদনের জন্য নোড 'অপশনালভ্যালু' ফর্ম্যাট করতে পারিনি" get আমি একটি ডিফল্ট মান (শূন্য) সরবরাহ করার চেষ্টাও করেছি, তবে এটিও পছন্দ হয়নি।
gfrizzle

আহ। দেখে মনে হচ্ছে ডিফল্টআইএফপিটি লিনকু থেকে এসকিউএল সমর্থিত নয়। .ToList দিয়ে প্রথমে একটি তালিকায় কাস্ট করে আপনি এটিকে পেতে পারেন।
জ্যাকব প্রোফিট 21

3
ধন্যবাদ, আমি ঠিক এটিই খুঁজছিলাম এক্সটেনশন পদ্ধতিগুলি ব্যবহার করে:var colCount = RowsEnumerable.Select(row => row.Cols.Count).DefaultIfEmpty().Max()
জানি

35

আপনি যা জিজ্ঞাসা করছেন সে সম্পর্কে চিন্তা করুন!

সর্বোচ্চ {1, 2, 3, -1, -2, -3} স্পষ্টতই 3 {2} সর্বাধিক স্পষ্টভাবে 2. তবে খালি সেট set} এর সর্বোচ্চ কত? অবশ্যই এটি অর্থহীন প্রশ্ন। খালি সেট সর্বাধিক সংজ্ঞায়িত করা হয় না। উত্তর পাওয়ার চেষ্টা করা একটি গাণিতিক ত্রুটি। যে কোনও সেট সর্বাধিক হওয়া উচিত itself সেটের একটি উপাদান। খালি সেটটিতে কোনও উপাদান নেই, সুতরাং দাবি করা হচ্ছে যে কোনও নির্দিষ্ট সংখ্যাটি সেটে না হয়েই সেটের সর্বাধিক, এটি গাণিতিক দ্বন্দ্ব।

প্রোগ্রামার যখন শূন্য দ্বারা বিভাজন করতে বলে তখন কম্পিউটারের জন্য একটি ব্যতিক্রম নিক্ষেপ করা যেমন সঠিক আচরণ, ঠিক তেমনি প্রোগ্রামার যখন খালি সেটটি সর্বাধিক নিতে বলছে তখন কম্পিউটারের জন্য একটি ব্যতিক্রম নিক্ষেপ করা সঠিক আচরণ। শূন্য দ্বারা বিভাজন, খালি সেটটির সর্বাধিক গ্রহণ, স্প্যাক্লোরার্ককে পাকানো এবং নেভারল্যান্ডে উড়ন্ত একরঙাটি চালানো সমস্ত অর্থহীন, অসম্ভব, অপরিজ্ঞাত।

এখন, এটি আসলে আপনি কী করতে চান?


শুভ পয়েন্ট - আমি এই বিবরণটি দিয়ে খুব শীঘ্রই আমার প্রশ্ন আপডেট করব। বলার অপেক্ষা রাখে যে আমি জানি যে আমি 0 চাই যখন নির্বাচন করার জন্য কোনও রেকর্ড নেই, যা অবশ্যই চূড়ান্ত সমাধানে প্রভাব ফেলে।
gfrizzle

17
আমি প্রায়শই আমার ইউনিকর্ন নেভারল্যান্ডে ওঠার চেষ্টা করি এবং আমার এই প্রচেষ্টা অর্থহীন এবং অপরিজ্ঞাত বলে আমি আপনার পরামর্শকে লভ্যা করি।
ক্রিস

2
আমি এই যুক্তি সঠিক মনে করি না। এটি ক্লিয়ার লিনাক-টু-এসকিএল এবং স্কুএলে সর্বোচ্চ শূন্য সারিতে নাল হিসাবে সংজ্ঞায়িত করা হয়েছে, না?
duedl0r

4
লিনকের সাধারণভাবে অভিন্ন ফলাফলগুলি উত্পন্ন করা উচিত যে বস্তুগুলিতে ক্যোরিটি ইন-মেমরি কার্যকর করা হয় বা সারিগুলির ডাটাবেসে কোয়েরি সম্পাদিত হয় কিনা। লিনক ক্যোয়ারিগুলি লিনক ক্যোয়ারী এবং এডাপ্টারের যে কোনও ব্যবহার নেই তা নির্বিশেষে বিশ্বস্তভাবে কার্যকর করা উচিত।
yfeldblum

1
আমি তত্ত্বের সাথে একমত হই যে লিনক ফলাফলগুলি স্মৃতিতে বা এসকিএল-তে নির্বাহ করা হোক না কেন একই রকম হওয়া উচিত, যখন আপনি আসলে কিছুটা গভীর গভীর খনন করেন, আপনি আবিষ্কার করেন যে এটি সর্বদা কেন এমন হতে পারে না। লিঙ্ক এক্সপ্রেশনগুলি জটিল এক্সপ্রেশন অনুবাদ ব্যবহার করে এসকিএলে অনুবাদ করা হয়। এটি একটি সহজ এক টু ওয়ান অনুবাদ নয়। একটি পার্থক্য নাল ক্ষেত্রে। সি # "নাল == নাল" সত্য। এসকিউএলে, "নাল == নাল" ম্যাচগুলি বাইরের যোগদানের জন্য অন্তর্ভুক্ত রয়েছে তবে অভ্যন্তরীণ যোগদানের জন্য নয়। যাইহোক, অভ্যন্তরীণ যোগদানগুলি প্রায়শই আপনি যা চান তাই সেগুলি ডিফল্ট হয়। এটি আচরণে সম্ভাব্য পার্থক্য সৃষ্টি করে।
কর্টিস ইয়ালাপ

25

আপনি সর্বদা Double.MinValueক্রম যোগ করতে পারে । এটি নিশ্চিত করবে যে কমপক্ষে একটি উপাদান রয়েছে এবং Maxএটি কেবলমাত্র সর্বনিম্ন হলেই এটি ফিরিয়ে আনবে। কোনটিতে বিকল্প অধিক দক্ষ হয় ( Concat, FirstOrDefaultবা Take(1)), আপনি পর্যাপ্ত মাপকাঠিতে সঞ্চালন করা উচিত নয়।

double x = context.MyTable
    .Where(y => y.MyField == value)
    .Select(y => y.MyCounter)
    .Concat(new double[]{Double.MinValue})
    .Max();

10
int max = list.Any() ? list.Max(i => i.MyCounter) : 0;

যদি তালিকার কোনও উপাদান থাকে (যেমন শূন্য নয়) তবে এটি মাইকাউন্টার ক্ষেত্রের সর্বাধিক গ্রহণ করবে, অন্যথায় 0 আসবে।


3
এই 2 কোয়েরি চালাতে হবে না?
andreapier

10

নেট .৩.৫ থেকে আপনি ডিফল্টইফেম্পটি () ডিফল্ট মানকে আর্গুমেন্ট হিসাবে পাস করতে পারেন। কিছু অনুসরণের উপায়গুলির মতো:

int max = (from e in context.Table where e.Year == year select e.RecordNumber).DefaultIfEmpty(0).Max();
DateTime maxDate = (from e in context.Table where e.Year == year select e.StartDate ?? DateTime.MinValue).DefaultIfEmpty(DateTime.MinValue).Max();

আপনি যখন একটি নন কলামটি জিজ্ঞাসা করেন তখন প্রথমটিকে অনুমতি দেওয়া হয় এবং দ্বিতীয়টি কোনও নুল কলামটি জিজ্ঞাসা করার জন্য এটি যেভাবে ব্যবহৃত হয়। আপনি যদি আর্গুমেন্ট ছাড়াই DefaultIfEmpty () ব্যবহার করেন তবে আপনার ডিফল্ট মানটি আপনার আউটপুট ধরণের সংজ্ঞায়িত হবে, আপনি ডিফল্ট মান সারণীতে দেখতে পাচ্ছেন ।

ফলাফল নির্বাচন এত মার্জিত হবে না তবে এটি গ্রহণযোগ্য।

আশা করি এটা সাহায্য করবে.


7

আমি মনে করি যখন কোয়েরির কোনও ফলাফল নেই তখন সমস্যাটি আপনি কী হতে চান। যদি এটি ব্যতিক্রমী কেস হয় তবে আমি চেষ্টাটি / ক্যাচ ব্লকে ক্যোরিটি মুড়িয়ে দেব এবং মান ব্যতীত যে ব্যতিক্রমটি উত্পন্ন হয় তা পরিচালনা করব। যদি ক্যোয়ারির কোনও ফলাফল না পাওয়া ঠিক থাকে তবে আপনি সেই ক্ষেত্রে ফলাফলটি কী চান তা খুঁজে বের করতে হবে। এটি @ ডেভিডের উত্তর (বা অনুরূপ কিছু কার্যকর হবে) হতে পারে। এটি হ'ল, যদি ম্যাক্স সর্বদা ইতিবাচক থাকে তবে কোনও ফলাফল না থাকলে কেবলমাত্র সেই তালিকাটিতে একটি "খারাপ" মান সন্নিবেশ করানো যথেষ্ট হতে পারে। সাধারণত, আমি এমন একটি ক্যোয়ারী আশা করব যা সর্বাধিক পুনরুদ্ধার করছে যাতে কিছু তথ্য কাজ করার জন্য থাকে এবং আমি চেষ্টা / ধরার পথে যেতে পারি অন্যথায় আপনি সর্বদা আপনার প্রাপ্ত মানটি সঠিক কিনা তা পরীক্ষা করতে বাধ্য হন। আমি '

Try
   Dim x = (From y In context.MyTable _
            Where y.MyField = value _
            Select y.MyCounter).Max
   ... continue working with x ...
Catch ex As SqlException
       ... do error processing ...
End Try

আমার ক্ষেত্রে, কোনও সারি ফিরে না আসার চেয়ে বেশি ঘন ঘন ঘটে না (উত্তরাধিকার ব্যবস্থা, রোগীর পূর্ববর্তী যোগ্যতা থাকতে পারে বা নাও থাকতে পারে), যদি এটি আরও ব্যতিক্রমী ঘটনা হত তবে আমি সম্ভবত এই পথে যেতে পারতাম (এবং আমি এখনও আরও কিছু ভাল দেখতে পাচ্ছি না)।
gfrizzle

6

আর একটি সম্ভাবনা হ'ল গ্রুপিং করা, আপনি কীভাবে কাঁচা এসকিউএল এ আসতে পারেন তার অনুরূপ:

from y in context.MyTable
group y.MyCounter by y.MyField into GrpByMyField
where GrpByMyField.Key == value
select GrpByMyField.Max()

একমাত্র জিনিস (লিনকুইপ্যাডে আবার পরীক্ষা করা) ভিবি লিনকু ফ্লেভারে স্যুইচ করা গ্রুপিং ক্লজটিতে সিনট্যাক্স ত্রুটি দেয়। আমি নিশ্চিত যে ধারণাটির সমতুল্য এটি সন্ধান করা যথেষ্ট সহজ, আমি জানি না কীভাবে এটি ভিবিতে প্রতিবিম্বিত করতে হয়।

উত্পন্ন এসকিউএল এর লাইন বরাবর কিছু হবে:

SELECT [t1].[MaxValue]
FROM (
    SELECT MAX([t0].[MyCounter) AS [MaxValue], [t0].[MyField]
    FROM [MyTable] AS [t0]
    GROUP BY [t0].[MyField]
    ) AS [t1]
WHERE [t1].[MyField] = @p0

নেস্টেড সেলেক্ট দেখতে উদ্ভট দেখাচ্ছে, যেমন ক্যোয়ারি এক্সিকিউশনটি সমস্ত সারি পুনরুদ্ধার করবে এবং তারপরে পুনরুদ্ধার করা সেট থেকে ম্যাচিংটি নির্বাচন করবে ... এসকিউএল সার্ভার কোয়েরিটি অভ্যন্তরীণ নির্বাচনকে যেখানে ক্লজ প্রয়োগ করার সাথে তুলনীয় কিছুতে অনুকূলিত করবে কিনা তা এই প্রশ্নটি রয়েছে। আমি এখন এটি খুঁজছি ...

আমি এসকিউএল সার্ভারে এক্সিকিউশন পরিকল্পনাগুলির ব্যাখ্যায় পারদর্শী নই, তবে মনে হচ্ছে যখন যখন ক্লাসটি বাহ্যিক নির্বাচনের উপর থাকবে তখন সেই ধাপের ফলস্বরূপ প্রকৃত সারিগুলির সংখ্যা কেবল সারণির সমস্ত সারি, কেবলমাত্র মিলে যাওয়া সারিগুলির বিপরীতে is যখন বিভাগটি অভ্যন্তরীণ নির্বাচন করুন। এটি বলেছিল, দেখে মনে হচ্ছে যে সমস্ত সারি বিবেচনা করা হলে কেবল 1% ব্যয়টি নিম্নলিখিত ধাপে স্থানান্তরিত হয়েছে এবং কেবলমাত্র এক সারি এসকিউএল সার্ভার থেকে ফিরে আসে যাতে এটি জিনিসগুলির দুর্দান্ত স্কিমের মধ্যে কোনও পার্থক্যের মতো বড় নয় not ।


6

দেরিতে লেট, তবে আমারও একই উদ্বেগ ছিল ...

আসল পোস্ট থেকে আপনার কোডটি পুনরায় প্রকাশ করে আপনি সেটটি সর্বাধিক এস দ্বারা সংজ্ঞায়িত করতে চান

(From y In context.MyTable _
 Where y.MyField = value _
 Select y.MyCounter)

অ্যাকাউন্টে আপনার শেষ মন্তব্য

বলার যথেষ্ট যে আমি জানি যে আমি 0 চাই যখন নির্বাচন করার জন্য কোনও রেকর্ড নেই, যা অবশ্যই পরিণামের সমাধানে প্রভাব ফেলে

আমি আপনার সমস্যাটিকে আবার নতুন করে বলতে পারি: আপনি সর্বোচ্চ {0 + এস} চান} এবং দেখে মনে হচ্ছে কনকটের সাথে প্রস্তাবিত সমাধানটি শব্দার্থগতভাবে সঠিক :-)

var max = new[]{0}
          .Concat((From y In context.MyTable _
                   Where y.MyField = value _
                   Select y.MyCounter))
          .Max();

3

কেন আরও সরাসরি কিছু না:

Dim x = context.MyTable.Max(Function(DataItem) DataItem.MyField = Value)

1

একটি আকর্ষণীয় পার্থক্য যা লক্ষণীয় বলে মনে হচ্ছে তা হ'ল ফার্স্টআরডেফল্ট এবং টেক (1) একই এসকিউএল তৈরি করে (লিনকপ্যাড অনুসারে, যাইহোক), ফার্স্টঅরডাফল্ট একটি মান দেয় - ডিফল্ট - যখন কোনও মিল থাকে না সারি থাকে এবং (1) রিটার্ন নেয় কোনও ফলাফল নেই ... কমপক্ষে লিনকিউপ্যাডে।


1

কেবল সেখানে উপস্থিত সকলকে জানাতে যে লিনককে সত্তা থেকে প্রতিষ্ঠানের ব্যবহার করা উপরের পদ্ধতিগুলি কার্যকর হবে না ...

চেষ্টা করলে এমন কিছু করুন

var max = new[]{0}
      .Concat((From y In context.MyTable _
               Where y.MyField = value _
               Select y.MyCounter))
      .Max();

এটি একটি ব্যতিক্রম ছুঁড়ে ফেলবে:

System.NotSupportedEception: লিনকিউ এক্সপ্রেশন নোড টাইপ 'NewArrayInit' লিনকু থেকে সত্তাগুলিতে সমর্থিত নয় ..

আমি ঠিক করার পরামর্শ দেব

(From y In context.MyTable _
                   Where y.MyField = value _
                   Select y.MyCounter))
          .OrderByDescending(x=>x).FirstOrDefault());

এবং FirstOrDefaultআপনার তালিকাটি খালি থাকলে 0 ফিরে আসবে।


অর্ডার দেওয়ার ফলে বড় ডেটাসেটগুলির সাথে একটি মারাত্মক কর্মক্ষমতা হ্রাস পেতে পারে। এটি সর্বাধিক মান সন্ধান করার জন্য খুব অদক্ষ উপায়।
পিটার ব্রুনস


1

আমি একটি MaxOrDefaultএক্সটেনশন পদ্ধতি ছুঁড়েছি । এটির তেমন কিছুই নেই তবে ইন্টেলিসেন্সে উপস্থিতি একটি দরকারী অনুস্মারক যা Maxখালি ক্রম অনুসারে একটি ব্যতিক্রম ঘটায়। অতিরিক্তভাবে, পদ্ধতিটি ডিফল্টকে প্রয়োজনে নির্দিষ্ট করার অনুমতি দেয়।

    public static TResult MaxOrDefault<TSource, TResult>(this 
    IQueryable<TSource> source, Expression<Func<TSource, TResult?>> selector,
    TResult defaultValue = default (TResult)) where TResult : struct
    {
        return source.Max(selector) ?? defaultValue;
    }

0

এনটিটি ফ্রেমওয়ার্ক এবং লিনক থেকে এসকিউএল করার জন্য আমরা একটি এক্সটেনশন পদ্ধতি সংজ্ঞায়িত করে এটি অর্জন করতে পারি যা একটি Expressionপাসের IQueryable<T>.Max(...)পদ্ধতিতে পরিবর্তিত করে :

static class Extensions
{
    public static TResult MaxOrDefault<T, TResult>(this IQueryable<T> source, 
                                                   Expression<Func<T, TResult>> selector)
        where TResult : struct
    {
        UnaryExpression castedBody = Expression.Convert(selector.Body, typeof(TResult?));
        Expression<Func<T, TResult?>> lambda = Expression.Lambda<Func<T,TResult?>>(castedBody, selector.Parameters);
        return source.Max(lambda) ?? default(TResult);
    }
}

ব্যবহার:

int maxId = dbContextInstance.Employees.MaxOrDefault(employee => employee.Id);
// maxId is equal to 0 if there is no records in Employees table

উত্পন্ন জিজ্ঞাসাটি অভিন্ন, এটি IQueryable<T>.Max(...)পদ্ধতিতে কেবল একটি সাধারণ কলের মতো কাজ করে , তবে যদি কোনও রেকর্ড না থাকে তবে এটি এক্সপশন নিক্ষেপের পরিবর্তে টি টাইপ টির একটি ডিফল্ট মান প্রদান করে


-1

আমি ঠিক একইরকম সমস্যা পেয়েছি, আমার ইউনিট পরীক্ষাগুলি সর্বোচ্চ () ব্যবহার করে উত্তীর্ণ হয়েছে কিন্তু লাইভ ডাটাবেসের বিরুদ্ধে চালিত হয়ে গেলে ব্যর্থ হয়েছিল।

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

(আমি আমার পরীক্ষাগুলিতে নির্বাচনকে () উপহাস করি)

var requiredDataQuery = _dataRepo.Select(x => new { x.NullableDate1, .NullableDate2 }); 
var requiredData.ToList();
var maxDate1 = dates.Max(x => x.NullableDate1);
var maxDate2 = dates.Max(x => x.NullableDate2);

কম দক্ষ? সম্ভবত।

আমার অ্যাপ্লিকেশনটি যতক্ষণ না পরের বারের মতো নেমে আসে আমি ততক্ষণ যত্ন নিই? নাঃ।

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