ক্যোয়ারী প্যাটার্নটির কোনও প্রয়োগকরণ খুঁজে পাওয়া যায় নি


105

আমার সিলভারলাইট অ্যাপ্লিকেশনটিতে আমি লিনকিউ ব্যবহার করে একটি ডেটাবেস সংযোগ তৈরি করার চেষ্টা করছি। প্রথমে আমি এসকিউএল ক্লাসে একটি নতুন লিনকিউ যুক্ত করি এবং আমার টেবিলটিকে "টিবিএলপারসুন" এ টেনে আনি।

তারপরে আমার পরিষেবা ফাইলে আমি নিম্নলিখিত কোয়েরিটি সম্পাদন করার চেষ্টা করি:

[OperationContract]
public tblPersoon GetPersoonByID(string id)
{
    var query = (from p in tblPersoon where p.id == id select p).Single();

তবে টিবিএলপারসুনে এটি আমাকে নীচের ত্রুটি দেয়।

উত্স টাইপ 'সিলভারলাইট অ্যাপ্লিকেশন 1.Web.tblPersoon' এর জন্য ক্যোয়ারী প্যাটার্নের একটি প্রয়োগকরণ খুঁজে পাওয়া যায় নি। 'কোথায়' পাওয়া যায় নি।

এমনকি আমি যখন নিম্নলিখিতগুলি চেষ্টা করি:

var query = (from p in tblPersoon select p).Single();

এটি 'সিলেক্ট' না বলে আমাকে ত্রুটি দেয়!

আমার টেবিলের জন্য উত্পন্ন শ্রেণীর কোডটি এখানে পাওয়া যাবে: http://pastebin.com/edx3XRhi

কী কারণে এটি ঘটছে এবং আমি কীভাবে এটি সমাধান করব?

ধন্যবাদ.

উত্তর:


263

হয় tblPersoonবাস্তবায়ন IEnumerable<T>? এটি ব্যবহার করে আপনার প্রয়োজন হতে পারে:

var query = (from p in tblPersoon.Cast<Person>() select p).Single();

এই ধরণের ত্রুটি ( ক্যোয়ারী প্যাটার্নটির কোনও প্রয়োগকরণ খুঁজে পাওয়া যায়নি ) সাধারণত যখন ঘটে:

  • আপনি লিনকিউ নেমস্পেসের ব্যবহার অনুপস্থিত ( using System.Linq)
  • আপনি যে ধরণের অনুসন্ধান করছেন তা কার্যকর হয় না IEnumerable<T>

সম্পাদনা করুন :

tblPersoonসম্পত্তির পরিবর্তে আপনি কোয়েরি টাইপ করুন ( ) ব্যতীত tblPersoonsআপনার প্রসঙ্গ উদাহরণও প্রয়োজন (শ্রেণি যা tblPersoonsসম্পত্তি সংজ্ঞায়িত করে ) যেমন:

public tblPersoon GetPersoonByID(string id)
{
    var context = new DataClasses1DataContext();
    var query = context.tblPersoons.Where(p => p.id == id).Single();
    // ...

আমার ডেটাচ্লাস 1. ডিজাইনার কোডস (কোড লিনকিউ অটো জেনারেট করে) এর মধ্যে আইওনামেবল <T> অন্তর্ভুক্ত নেই। public System.Data.Linq.Table<tblPersoon> tblPersoons { get { return this.GetTable<tblPersoon>(); } } এবং যখন আমি ব্যবহার করি: var ক্যোয়ারী = (টি থেকে টিবিএলপারসুনে ast কাস্ট <পার্সন> () পি নির্বাচন করুন) .সিংল (); এটি আমাকে .সিস্টে নিম্নলিখিত ত্রুটিগুলি দেয়। 'সিলভারলাইট
অ্যাপ্লিকেশন 1.Web.tblPersoon

4
@ থমাসস্কোফ: এটি টাইপও হতে পারে? টাইপ করার সময় সম্পত্তি বলা হয় tblPersoons( শেষে s গুলি নোট করুন ) tblPersoon। আপনি টাইপ অনুযায়ী সম্পত্তি পরিবর্তে টাইপ অনুসন্ধান করুন।
কিমি

যদি আমি চেষ্টা করি var query = (from p in tblPersoons select p).Single();এটি আমাকে টিবিএলপারসুনগুলি বলার অপেক্ষা রাখে না।
শোফ

4
আমি মনে করি না এসকিউএল LINQ আপডেট ডাটাবেস অভিপ্রেত ছিল (অত: পর ক্যোয়ারী ল্যাঙ্গুয়েজ ইন্টিগ্রেটেড ক্যোয়ারীতে), তবে আপনি সেই বিষয় সঙ্গে কিছু সহায়তা খুঁজতে পারেন এসকিউএল দুটিই MSDN পৃষ্ঠায় LINQ ( অনুসন্ধান ছাড়া আপডেট করা হচ্ছে অধ্যায়)।
কিমি

30
যোগ করার পদ্ধতি System.Linq ব্যবহার আমার জন্য তা .. :)
Guruprasad জে রাও

184

usingআপনার ফাইলটিতে একটি বিবৃতি যুক্ত করতে হতে পারে । ডিফল্ট সিলভারলাইট শ্রেণীর টেম্পলেটটি এতে অন্তর্ভুক্ত করে না:

using System.Linq;

উত্তরের জন্য ধন্যবাদ, তবে ব্যবহারের বিবৃতিটি ইতিমধ্যে সেখানে ছিল।
শোফ

4
উত্তরের জন্য ধন্যবাদ ... এটি আমার সমস্যাটিকে সংশোধন করেছে !!! কিন্তু ... আপনি সরবরাহ করতে পারেন একটি অতিরিক্ত ব্যাখ্যা আছে?
জো

অসাধারণ!! আপনাকে ধন্যবাদ
নীল পিরানহা

ক্রুদ্ধ করা. ধন্যবাদ.
ব্যারি


7

উত্পন্ন দৃ strongly়ভাবে টাইপ করা ডেটাসেটগুলির সাথে আমার একই সমস্যা ছিল, সম্পূর্ণ ত্রুটি বার্তাটি ছিল:

উত্স টাইপ 'MyApp.InvcHeadDataTable' জন্য ক্যোয়ারী প্যাটার্নের একটি প্রয়োগকরণ খুঁজে পাওয়া যায় নি। 'কোথায়' পাওয়া যায় নি। পরিসীমা পরিবর্তনশীল 'সারি' প্রকারের স্পষ্টভাবে নির্দিষ্ট করে বিবেচনা করুন।

আমার কোড থেকে:

        var x =
            from row in ds.InvcHead
            where row.Company == Session.CompanyID
            select row;

সুতরাং আমি এটির পরামর্শ অনুযায়ী এবং স্পষ্টভাবে প্রকারটি নির্দিষ্ট করে দিয়েছি:

        var x =
            from MyApp.InvcHeadRow row in ds.InvcHead
            where row.Company == Session.CompanyID
            select row;

যা একটি ট্রিট কাজ করে।


5

আপনি একটি সমতা অনুপস্থিত:

var query = (from p in tblPersoon where p.id == 5 select p).Single();

where ধারাটির ফলস্বরূপ একটি বুলিয়ান হতে হবে।

অথবা আপনার মোটেও ব্যবহার whereকরা উচিত নয় :

var query = (from p in tblPersoon select p).Single();

ধন্যবাদ, আমি সত্যিই আমার সাম্য অনুভব করছিলাম, যা আমার কাছে বোকা। তবে আমি এখন নিম্নলিখিত ত্রুটিটি পাচ্ছি: ত্রুটি 1 উত্স টাইপ 'সিলভারলাইট অ্যাপ্লিকেশন 1.Web.tblPersoon' এর জন্য ক্যোয়ারী প্যাটার্নের একটি প্রয়োগ খুঁজে পাওয়া যায় নি। 'কোথায়' পাওয়া যায় নি।
স্কুফ

0

শিরোনাম অনুসারে বর্ণিত হিসাবে আমার একই ত্রুটি ছিল, তবে আমার জন্য এটি লিনকটোএক্সেল ব্যবহার করার জন্য মাইক্রোসফ্ট অ্যাক্সেস 12.0 ওলেড পুনরায় বিতরণযোগ্য ইনস্টল করা ছিল।


0

হাই করার সবচেয়ে সহজ উপায় হ'ল এই আইনিউমারকে একটি ক্যোয়ারেবলে রূপান্তর করা

এটি যদি জিজ্ঞাস্য হয় তবে অনুসন্ধানগুলি সম্পাদন করা সহজ হয়ে যায়।

দয়া করে এই কোডটি পরীক্ষা করুন:

var result = (from s in _ctx.ScannedDatas.AsQueryable()
                              where s.Data == scanData
                              select s.Id).FirstOrDefault();
                return "Match Found";

আপনি সিস্টেম.লিংক অন্তর্ভুক্ত করেছেন তা নিশ্চিত করুন । এইভাবে আপনার ত্রুটিটি সমাধান হবে।


0

আপনারা (আমার মত) যারা এই ত্রুটি থেকে খুব বেশি সময় নষ্ট করেছেন তাদের জন্য:

আমি একই ত্রুটিটি পেয়েছি: "উত্স টাইপ 'ডিবিসেট' এর জন্য ক্যোয়ারী প্যাটার্নের প্রয়োগের সন্ধান পাওয়া যায় নি" তবে আমার জন্য সমাধানটি ডিবিকন্টেক্সট স্তরে একটি ভুল ফিক্স করছিল।

যখন আমি আমার প্রসঙ্গটি তৈরি করেছি আমার এটি ছিল:

public class ContactContext : DbContext
    {
        public ContactContext() : base() { }

        public DbSet Contacts { get; set; }
    }

এবং আমার সংগ্রহস্থল (আমি এএসপি.এনইটি গাইডে একটি সংগ্রহস্থলের ধরণ অনুসরণ করছিলাম) এটি দেখতে দেখতে:

public Contact FindById(int id)
    {       
        var contact = from c in _db.Contacts where c.Id == id select c;
        return contact;
    }

আমার সমস্যাটি আমার ডিবি কনটেক্সট এর প্রাথমিক সেটআপ থেকে এসেছিল, যখন আমি ধরণের পরিবর্তে জেনেরিক হিসাবে ডিবিসেট ব্যবহার করি।

আমি পরিবর্তন public DbSet Contacts { get; set; }করতে public DbSet<Contact> Contacts { get; set; }এবং হঠাৎ ক্যোয়ারী স্বীকৃত ছিল।


কিমিটার তার উত্তরে সম্ভবত এটিই বলেছে, তবে যেহেতু তিনি উল্লেখ করেছেন IEnumerable<t>এবং না তাই DbSet<<YourDomainObject>>আমাকে এই মাথা ব্যাথার কারণ হয়ে রেখাটি খুঁজে পেতে কয়েক ঘন্টার জন্য কোডে ঘুরতে হয়েছিল।


0

আমারও একই ত্রুটি ছিল, তবে আমার কাছে এটির জন্য একটি ডাটাবেস এবং একটি টেবিল থাকার কারণ হিসাবে চিহ্নিত করা হয়েছিল। আমি যখন আমার প্রকল্পে ADO .NET সত্তা অবজেক্ট যুক্ত করেছি তখন এটি আমার ডাটাবেস প্রসঙ্গে ফাইলটিতে যা চেয়েছিল তা ভুলভাবে তৈরি করে:

// Table
public virtual DbSet<OBJ> OBJs { get; set; }

যা হওয়া উচিত ছিল:

public virtual DbSet<OBJ> OBJ { get; set; }

এবং

// Database?
public object OBJ { get; internal set; }

যা আসলে আমার দরকার ছিল না, তাই আমি এটি মন্তব্য করেছিলাম।

আমি যখন আমার ত্রুটি পেয়েছি তখন আমার নিয়ামকটিতে আমার টেবিলটি এভাবে টেনে আনার চেষ্টা করছিলাম:

protected Model1 db = new Model1();

public ActionResult Index()
{
    var obj =
        from p in db.OBJ
        orderby p.OBJ_ID descending
        select p;

    return View(obj);
}

আমি আমার ডাটাবেস প্রসঙ্গটি সংশোধন করেছি এবং তার পরে সব ঠিক আছে।

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